Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Acara Berulang, SQL Query

Kecuali saya melewatkan sesuatu, jawabannya ternyata sangat sederhana. Saya tidak menyadari bahwa UNION dapat diurutkan pada kolom umum dengan menggunakan alias, meskipun kolom tersebut berasal dari tabel yang berbeda. Jadi kueri lengkapnya adalah:

SELECT DISTINCT(e.eventid),n.nameid,n.firstname,n.lastname,d.dt AS dait,r.recurring
FROM dates d 
LEFT JOIN recurringtypes r
/* if event recurring every week E.g. 'Every Monday' */
ON (r.rectypeid BETWEEN 2 AND 8 AND r.day = d.dow) 
/* if event recurring every month E.g. 'First Monday, every month' */
OR ((r.rectypeid BETWEEN 9 AND 36) AND r.day = d.dow AND r.occurrence = d.occurrence) 
/* if event recurring every last week of month E.g. 'Last Monday, every month' */
OR (r.rectypeid >= 37 AND r.day = d.dow and r.islast = d.islast)
LEFT JOIN events e on e.rectypeid = r.rectypeid
LEFT JOIN eventtypes t ON e.eventtypeid = t.eventtypeid
LEFT JOIN names n ON e.namesid = n.namesid
WHERE (d.dt BETWEEN '2012/02/01' AND '2012/05/01')
UNION
SELECT e.eventid,n.nameid,n.lastname,n.firstname,e.firstdate AS dait,'No' as Recurring
FROM events e
LEFT JOIN names n ON n.names = e.namesid 
AND e.rectypeid <= 1 
WHERE e.firstdate BETWEEN '2012/02/01' AND '2012/05/01' 
ORDER BY dait;

Telah ditunjukkan bahwa menggunakan tabel untuk mencari tanggal adalah risiko karena tanggal pada akhirnya akan habis, yang memang benar, tetapi menghitung apakah suatu tanggal, misalnya, Senin pertama dalam sebulan (atau Senin kedua, atau keempat atau mungkin keempat dan terakhir), sepertinya kode SQL yang lebih kompleks daripada yang ingin saya bahas saat ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat bidang baru di tabel saat pengguna mengklik tautan

  2. Cara Menambahkan Kolom Auto Increment pada Tabel yang Ada di MySQL

  3. penggunaan auto_increment dalam kunci komposit

  4. Indeks bulan Objek Tanggal JavaScript dimulai dengan 0

  5. Apa perbedaan antara utf8_general_ci dan utf8_unicode_ci?