非常简单的概念。我根据生成日期(X天前)选择特定行,并按时间范围组织它们(在这种情况下,变量是OVERDUEDAYS)。我现在唯一的问题是定义OVERDUEDAYS并选择整行内容而不必在select语句中定义每一列。
没有进一步的麻烦(这是我希望实现的目标):
SELECT DATEDIFF(CURDATE(), DATE(date_generated)) AS OVERDUEDAYS, * FROM invoices WHERE
(DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 10 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 30 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 45 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 53 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 60 DAY))
AND
(paid=0 AND cancelled=0)
当你删除通配符并手动定义每一列时,查询效果很好......但这是很多列,我想不惜一切代价避免这种情况。建议?
答案 0 :(得分:-2)
SELECT * FROM invoices WHERE colunm_id IN (
SELECT colunm_id FROM invoices WHERE
(DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 10 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 30 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 45 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 53 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 60 DAY))
AND
(paid=0 AND cancelled=0)
)