MYSQL按自定义间隔分组

wnavrhmk  于 2023-03-17  发布在  Mysql
关注(0)|答案(2)|浏览(125)

我有一个MySQL表,每行都有日期时间值。
我试着按两个间隔进行分组:
1.从现在到现在的日期-1小时
1.日期介于现在-1小时和现在-2小时之间
我做什么?

SELECT MIN(date), MAX(date), count(stats.ID) as c FROM stats WHERE date BETWEEN (NOW() - INTERVAL 2 HOUR) AND NOW() GROUP BY UNIX_TIMESTAMP(date) DIV 7200

| 最小值(日期)|最大值(日期)|计数|
| - ------|- ------|- ------|
| 2023年3月11日18时45分15秒|2023年3月11日18时59分59秒|一百五十|
| 2023年3月11日19时00分01秒|2023年3月11日19时45分15秒|二百五十|
我试试这个:

SELECT count(ID),  MIN(date), MAX(date), sec_to_time(time_to_sec(date)- time_to_sec(DATE)%(60*60)) as intervals from stats WHERE date BETWEEN (NOW() - INTERVAL 2 HOUR) AND NOW()group by intervals

| 最小值(日期)|最大值(日期)|计数|
| - ------|- ------|- ------|
| 2023年3月11日18时45分15秒|2023年3月11日18时59分59秒|一百五十|
| 2023年3月11日19时00分|2023年3月11日19时59分59秒|二百五十|
| 2023年3月11日20时00分|2023年3月11日19时45分15秒|二百五十|
预期成果
| 最小值(日期)|最大值(日期)|计数|
| - ------|- ------|- ------|
| 2023年3月11日18时45分15秒|2023年3月11日19时45分15秒|一百五十|
| 2023年3月11日19时45分15秒|2023年3月11日20时45分15秒|二百五十|

z8dt9xmd

z8dt9xmd1#

一些示例数据和预期输出会很有帮助,但您不能只做:

SELECT MIN(`date`), MAX(`date`), COUNT(stats.ID) AS c,
    CASE
        WHEN `date` BETWEEN NOW() - INTERVAL 2 HOUR AND NOW() - INTERVAL 1 HOUR
            THEN 1
        WHEN `date` BETWEEN NOW() - INTERVAL 1 HOUR AND NOW()
            THEN 2
    END AS grp
FROM stats
WHERE `date` BETWEEN NOW() - INTERVAL 2 HOUR AND NOW()
GROUP BY grp

或者甚至只是:

SELECT MIN(`date`), MAX(`date`), COUNT(stats.ID) AS c,
    IF(`date` <= NOW() - INTERVAL 1 HOUR, 1, 2) AS grp
FROM stats
WHERE `date` BETWEEN NOW() - INTERVAL 2 HOUR AND NOW()
GROUP BY grp;
ecfdbz9o

ecfdbz9o2#

SELECT AGGREGATE_FN( CASE WHEN datetime_column BETWEEN NOW() AND NOW - INTERVAL 1 HOUR
                          THEN value_column
                          END) AS agg_now,
       AGGREGATE_FN( CASE WHEN datetime_column BETWEEN NOW() - INTERVAL 1 HOUR AND NOW - INTERVAL 2 HOUR
                          THEN value_column
                          END) AS agg_before
FROM data_source
WHERE datetime_column BETWEEN NOW() AND NOW - INTERVAL 2 HOUR;

相关问题