gpt4 book ai didi

mysql - 不同时间段的SQL查询

转载 作者:可可西里 更新时间:2023-11-01 08:49:31 25 4
gpt4 key购买 nike

enter image description here

我有一个包含以下条目的表:

completed_time||   BOOK_CNT
*********************************************
2013-07-23 | 2
2013-07-22 | 1
2013-07-19 | 3
2013-07 16 |5
2013-07-12 |4
2013-07-11 |2
2013-07-02 |9
2013-06-30 |5

现在,我想使用上面的条目进行数据分析。

假设 DAYS_FROM、DAYS_TO 和 PERIOD 是三个变量。

我需要触发以下类型的查询:

PERIOD 间隔内从 DAYS_FROM 到 DAYS_TO 的图书总数。

DAYS_FROM 是 YYYY-MM-DD 格式的日期

,DAYS_TO 是 YYYY-MM-DD 格式的日期

PERIOD 是 {1W,2W,1M,2M,1Y} 其中 W、M、Y 代表 WEEK、MONTH 和 YEAR。

示例:查询 DAYS_FROM=2013-07-23 、DAYS_TO=2013-07-03 和 PERIOD=1W 应返回:

ith week - total
1 - 3
2- 8
3- 6
4- 14

解释:

1-3 means (The total book from 2013-07-21(sun) to 2013-07-23(tue) is 3 )
2-8 means (The total book from 2013-07-14(sun) to 2013-07-21(sun) is 8 )
3-16 means (The total book from 2013-07-07(sun) to 2013-07-14(sun) is 6 )
4-14 means (The total book from 2013-07-03(wed) to 2013-07-07(sun) is 14 )

请引用日历图片以便更好地理解

如何触发这样的查询?

我试过什么?

 SELECT DAY(completed_time), COUNT(total) AS Total
FROM my_tab
WHERE completed_time BETWEEN '2013-07-23' - INTERVAL 1 WEEK AND '2013-07-03'
GROUP BY DAY(completed_time);

上述查询从 2013-07-23 减去 7 天,因此将 2013-07-16 到 2013-07-23 视为第一周 2013-07-09 到 2013-07-16 作为第二周 依此类推。

最佳答案

一个简单的起点如下所示,当然您可能需要调整 ith<​​ 值以满足您的需要;

SET @period='1M';

SELECT CASE WHEN @period='1Y' THEN YEAR(completed_time)
WHEN @period='1M' THEN YEAR(completed_time)*100+MONTH(completed_time)
WHEN @period='2M' THEN FLOOR((YEAR(completed_time)*100+MONTH(completed_time))/2)*2
WHEN @period='1W' THEN YEARWEEK(completed_time)
WHEN @period='2W' THEN FLOOR(YEARWEEK(completed_time)/2)*2
END ith,
SUM(BOOK_CNT) Total
FROM my_tab
GROUP BY ith
ORDER BY ith DESC;

An SQLfiddle to test with .

关于mysql - 不同时间段的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829772/

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