目前我正在尝试创建一个查询,从我的issues
表中检索过去 15 天和过去 30 天的值。我可以在单独的查询中返回这些值,但我想知道是否可以在一个查询中执行此操作。截至目前,我正在使用的查询如下所示:
SELECT
issue, COUNT(id) AS total_issues
FROM
mytable
WHERE
issue_date BETWEEN DATE(NOW() - INTERVAL 30 DAY) AND DATE(NOW())
AND issue != 'Currently Unavailable'
AND issue != 'Out Of Stock'
GROUP BY issue;
这将返回过去 30 天内的问题以及它们在此期间发生的总次数,如下所示:
|issue |total_issues|
|issue1 |12 |
|issue2 |24 |
|issue3 |2 |
但我想得到的是更多的东西:
|issues_30 |total_issues|
|issue1 |12 |
|issue2 |24 |
|issue3 |2 |
|issues_15 |total_issues|
|issue1 |8 |
|issue2 |14 |
我在网上查看是否有一种方法可以在这样的特定间隔之间返回值,但只找到了关于一个时间间隔而不是多个时间间隔的问题的答案。
我不知道这目前在 MySQL 中是否可行,或者我没有其他选择然后进行这些所有单独的查询。说我不仅想要过去 30 天和 15 天的值,还想要过去 7 天的值。这意味着我必须添加另一个查询才能获取过去 7 天的问题,这似乎是不好的做法。唯一让我认为这可能不可行的事情是,对于每个不同的时间间隔,并非所有问题都会出现(就像在我的示例中那样,issue3
因为它只在过去 30 天内发生,所以它会被删除。所以我可能会期望这样的结果:
|issues_30 |total_issues|
|issue1 |12 |
|issue2 |24 |
|issue3 |2 |
|issues_15 |total_issues|
|issue1 |8 |
|issue2 |14 |
|issue3 |0 |
如果有人在创建这样的查询方面有任何经验,并且可以帮助我了解需要做什么来实现这一点,那将非常有帮助。蒂亚!
我更喜欢这个版本,它使用带有条件聚合的单个查询来查找两种类型的计数:
SELECT
issue,
COUNT(CASE WHEN issue_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
THEN 1 END) AS issues_last_30,
COUNT(CASE WHEN issue_date BETWEEN CURDATE() - INTERVAL 15 DAY AND CURDATE()
THEN 1 END) AS issues_last_15,
COUNT(*) AS total_issues
FROM mytable
WHERE
issue != 'Currently Unavailable' AND
issue != 'Out Of Stock'
GROUP BY
issue;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句