gpt4 book ai didi

mysql - 日期之间的查询不起作用,现在我们进入了新的一年

转载 作者:行者123 更新时间:2023-11-29 07:45:03 25 4
gpt4 key购买 nike

我去年创建了这个查询,用于从数据库中选择前 6 个月的数据。

SELECT months.month_name,
COALESCE(SUM(job_details.price_each*job_details.quantity),0) AS sum_monthly_price, customer.company_name
FROM months
CROSS JOIN customer
LEFT JOIN job on job.company_id = customer.company_id
AND months.month = month(job.order_date)
AND job.order_date > DATE_SUB(NOW(), INTERVAL 6 MONTH)
LEFT JOIN job_details on job.job_id = job_details.job_id
WHERE months.month > month(DATE_SUB(NOW(), INTERVAL 6 MONTH))
AND months.month <= month(NOW())
AND customer.company_id = 2
GROUP BY months.month
ORDER BY months.month asc

问题似乎出在 where 子句 WHERE months.month > month(DATE_SUB(NOW(), INTERVAL 6 MONTH)) AND months.month <= month(NOW())

似乎在新年之前它就在 06 月到 12 月之间工作。但是现在我试图在 07 月到 01 月之间查看。

当我的查询运行时,现在我们已经进入了新的一年,它不会返回任何结果。如果我将位置更改为 WHERE months.month > month(DATE_SUB(NOW(), INTERVAL 6 MONTH)) ,就像仅从日期开始一样,它会将所有内容返回到第 12 个月,因为显然我正在做的事情大于第 01 个月,并且它会忽略第 01 个月。

我不明白为什么我的原始查询不起作用,因为它应该仍然大于一个日期且小于另一个日期。

任何人都可以弄清楚我做错了什么吗?

最佳答案

您的原始查询不起作用的原因是,它确实“大于七月小于一月”,这显然不返回任何结果。如果您只想获得过去六个月的结果(例如,从 7 月 18 日到 1 月 18 日),您可以替换

WHERE months.month > month(DATE_SUB(NOW(), INTERVAL 6 MONTH))
AND months.month <= month(NOW())

WHERE job.order_date BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW()

如果您确实想获取过去六个月的数据(例如,从 7 月 1 日到 1 月 18 日),那么您可以执行以下操作:

WHERE job.order_date BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 6 MONTH), "%Y-%m-01 00:00:00") AND NOW()

更新:根据评论中的讨论,要求也选择空月份。这是这样的查询的编写方式:

SELECT months.month_name,
COALESCE(SUM(job_details.price_each*job_details.quantity),0) AS sum_monthly_price, customer.company_name
FROM months
CROSS JOIN customer
LEFT JOIN job on job.company_id = customer.company_id
AND months.month = month(job.order_date)
AND job.order_date > DATE_SUB(NOW(), INTERVAL 6 MONTH)
LEFT JOIN job_details on job.job_id = job_details.job_id
WHERE (DATE_FORMAT(NOW(), CONCAT("%Y-", month, "-%d")) BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW() OR DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 YEAR), CONCAT("%Y-", month, "-%d")) BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW())
AND customer.company_id = 2
GROUP BY months.month
ORDER BY months.month asc

关于mysql - 日期之间的查询不起作用,现在我们进入了新的一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com