Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zdarzenia cykliczne, zapytanie SQL

O ile czegoś mi nie brakuje, odpowiedź jest zaskakująco prosta. Nie zdawałem sobie sprawy, że UNIONs można sortować według wspólnych kolumn przy użyciu aliasów, nawet jeśli te kolumny pochodzą z różnych tabel. Zatem pełne zapytanie będzie wyglądało następująco:

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;

Zwrócono uwagę, że korzystanie z tabeli do wyszukiwania dat jest ryzykowne, ponieważ daty w końcu się skończą, co prawda, ale obliczając, czy datą jest np. pierwszy poniedziałek miesiąca (czy drugi, czy czwarty a może czwarty i ostatni) wydaje się być bardziej złożonym fragmentem kodu SQL, niż chcę się teraz zająć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL jak inne pole

  2. Nie znaleziono polecenia Mysql w systemie OS X 10.7

  3. Mysql:Znajdź wpisy z określonego dnia za pomocą kolumny sygnatury czasowej

  4. Różnica MySql między dwoma znacznikami czasu w dniach?

  5. Twórz komentarze do widoków w mysql