我需要构建一个执行以下操作的 SQL 查询
SELECT pi.desc,
pa.nameAddress,
pi.ref,
pi.descItem,
pi.quantity,
pi.totalDF,
pi.code,
pi.codeBL,
cl.dateShip, po.dtValidated, po.supervisorDate, DATEDIFF(po.supervisorDate, po.dtValidated) AS 'diffValidSupervisor', DATEDIFF(cl.dtlivr, po.supervisorDate) AS 'diffExpeValid', year(cl.dtlivr), month(cl.dtlivr) FROM
new.proforma_item pi
INNER JOIN
old.cdestk_lig cl ON pi.codeCde = cl.codcde INNER JOIN new.proforma po ON po.idProforma = pi.idProforma Inner JOIN new.proforma_address pa ON po.idProforma = pa.idProforma GROUP BY pi.desc, pi.ref, pi.descItem, pi.code, pi.codeBL, cl.dateShip, po.dtValidated, po.supervisorDate, month(cl.dateShip), po.dateInvoice HAVING (po.dateInvoice between '2014-01-01' AND '2014-12-31')
但每年我都必须审查这个更改年份的请求。我想让它动态化,因为手动更改它在我们的架构中简直是疯了。
最好的是:
假设我们是 2015 年 6 月 15 日
。我想要一个涵盖这段时间的 between 子句:
2015-01-01 to 2015-05-31
在 finite 中,我需要一个介于当年的第一天和上个月的最后一天之间的时间。
编辑
当我们在 Januray 时,我们必须处理整个过去的一年,而不是当月。 (一月下月处理)
最佳答案
您可以使用 DATE_FORMAT
函数构造一年的第一天和LAST_DAY
获取上个月的最后一天。
po.dateInvoice between DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-01-01') AND LAST_DAY(NOW() - INTERVAL 1 MONTH)
- SQL fiddle for the current date
- SQL fiddle for January 2015 (显示 2014 年全年)
关于mysql - DATE 在动态之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069263/