sql >> Database >  >> RDS >> Mysql

Terugkerende gebeurtenissen, SQL-query

Tenzij ik iets mis, is het antwoord verrassend eenvoudig. Ik had me niet gerealiseerd dat UNION's op gemeenschappelijke kolommen kunnen worden gesorteerd door een alias te gebruiken, zelfs als die kolommen uit verschillende tabellen komen. De volledige query zou dus zijn:

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;

Er is op gewezen dat het gebruik van een tabel voor het opzoeken van datums een risico is, omdat de datums uiteindelijk opraken, wat waar is, maar berekenen of een datum bijvoorbeeld de eerste maandag in een maand is (of de tweede, of vierde of misschien vierde en laatste), lijkt een complexer stukje SQL-code dan ik op dit moment wil bespreken.



  1. SSRS-rapportdefinitie is nieuwer dan Server

  2. Python+MySQL - Bulk invoegen

  3. Vind punt in polygoon PHP

  4. Hoe alleen datum en jaar te vergelijken in php codeigniter