Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự kiện định kỳ, Truy vấn SQL

Trừ khi tôi thiếu thứ gì đó, câu trả lời đơn giản đến mức đáng ngạc nhiên. Tôi đã không nhận ra rằng các UNION có thể được sắp xếp trên các cột chung bằng cách sử dụng bí danh, ngay cả khi các cột đó từ các bảng khác nhau. Vì vậy, truy vấn đầy đủ sẽ là:

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;

Người ta đã chỉ ra rằng việc sử dụng bảng để tra cứu ngày là một rủi ro vì cuối cùng ngày sẽ hết, điều này đúng, nhưng việc tính toán xem một ngày có phải là, ví dụ, thứ Hai đầu tiên trong tháng (hay thứ hai, hoặc thứ tư hoặc có thể là thứ tư và cuối cùng), có vẻ như một đoạn mã SQL phức tạp hơn tôi muốn tham gia vào lúc này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trừ một hàng dữ liệu từ một hàng khác trong SQL

  2. Laravel 5.5 không thể hiển thị biểu đồ động bằng gói biểu đồ của ConsoleTV

  3. Nối một trường liên quan đến nhiều hàng của một bản ghi trong bộ truy vấn trong Django

  4. Khi tôi sử dụng c9.io, Làm cách nào để kết nối với MySQL

  5. đối số được cung cấp không phải là tài nguyên kết quả MySQL hợp lệ