Mysql
如何選擇具有日期頻率 的過期行?
+------------------------+--------+ | Invoice_id | due_date | amount | +-------------+----------+--------+ | 20 |2020-01-18| 1250 | +-------------+----------+--------+ | 21 |2020-01-15| 1335 | +-------------+----------+--------+
獲取所有已通過日期的記錄,
n days and its multiple serires
如下所示…例如 n=5
SELECT * FROM `invoices` WHERE `due_date = DATE_ADD(CURDATE() + INTERVAL 5 days) OR due_date = DATE_ADD(CURDATE() + INTERVAL 10 days) OR due_date = DATE_ADD(CURDATE() + INTERVAL 15 days)`
但我想讓它對任何人都通用
n value
**注意:*我機器中的 mySQL 版本是 5.
WITH RECURSIVE cte AS ( SELECT @starting_deviation num UNION ALL SELECT num + @delta_deviation FROM cte WHERE num < @final_deviation ) SELECT * FROM invoices JOIN cte ON invoices.due_date = CURRENT_DATE + INTERVAL cte.num DAY
對於來自 question
@starting_deviation := 5
和@delta_deviation := 5
的查詢@final_deviation := 15
。這些值可以按字面意思指定(立即插入查詢而不是變數),通過變數值賦值傳輸或從某個服務表中獲取。在 MySQL 5+ 中,您必須在子查詢中生成 numbers 表或使用外部靜態 numbers 表。
SELECT * FROM invoices JOIN ( SELECT 5 num UNION ALL SELECT 10 UNION ALL SELECT 15 ) cte ON invoices.due_date = CURRENT_DATE + INTERVAL cte.num DAY
我要補充的是我的頻率不高達 3 系列。它可以超過 3,也可以是任何數字….例如,如果 n 為 5,並且我想要 10 個頻率,則意味著 5,10,15,20……, 50
使用數字生成器。例如它可以是(顯示的生成器最多可以給出 64 個值):
SELECT * FROM invoices JOIN ( SELECT 5 * (1 + t1.num + t2.num * 4 + t3.num + 16) num FROM (SELECT 0 num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) t1, (SELECT 0 num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) t2, (SELECT 0 num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) t3 ) cte ON invoices.due_date = CURRENT_DATE + INTERVAL cte.num DAY WHERE cte.num BETWEEN 1 AND 10;
WHERE (DATEDIFF(due_date, CURDATE) % 5) = 0
將過濾到今天和今天之前或之後 5 天的任何倍數。將其用作其餘查詢的基本建構塊。