Mysql
 sql >> база данни >  >> RDS >> Mysql

Повтарящи се събития, SQL заявка

Освен ако не пропускам нещо, отговорът е изненадващо прост. Не бях разбрал, че UNION могат да бъдат сортирани по общи колони с помощта на псевдоним, дори ако тези колони са от различни таблици. Така че пълната заявка ще бъде:

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;

Беше посочено, че използването на таблица за търсене на дати е риск, защото датите в крайна сметка ще изтекат, което е вярно, но изчисляването дали дадена дата е например първия понеделник от месеца (или втория, или четвъртия) или може би четвърти и последен), изглежда като по-сложен бит от SQL код, отколкото искам да вляза в момента.



  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 MAX() функция за сравняване на числови стойности в актуализация?

  2. Премахване на дублиращи се редове в MySQL

  3. получаване на брой от същата колона в таблица на mysql?

  4. Динамично MySQL разделяне на базата на UnixTime

  5. Как да задам избрания елемент в падащо меню