当前位置: 首页 > 知识库问答 >
问题:

从包含长时间段的表中选择每N小时间隔

单于皓轩
2023-03-14

我下面有一个专栏,从2019年到2021年24小时显示:

2019-01-01 00:00:00
2019-01-01 01:00:00
2019-01-01 02:00:00
2019-01-01 03:00:00
2019-01-01 04:00:00
2019-01-01 05:00:00
2019-01-01 06:00:00
2019-01-01 07:00:00
2019-01-01 08:00:00
...
2019-01-02 00:00:00
2019-01-02 01:00:00
2019-01-02 02:00:00
2019-01-02 03:00:00
2019-01-02 04:00:00
2019-01-02 05:00:00
2019-01-02 06:00:00
2019-01-02 07:00:00
2019-01-02 08:00:00
...

我怎么能选择每隔4小时的时间点呢?我所期待的是:

2019-01-01 00:00:00
2019-01-01 04:00:00
2019-01-01 08:00:00
...

我尝试了一些选择,比如:

select Time_UTC from t1
GROUP BY DATE(Time_UTC), hour(Time_UTC) DIV 4;

就像这个问题:MySQL-从timestamp列中选择间隔每2小时

但它返回一个错误:

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 't1.Time_UTC' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我知道有一些方法可以解除限制。但我没有权限这么做。

共有1个答案

卫才
2023-03-14

这工作起来很好,只是使用完整的Group by,您需要使用一个aggrgage函数

CREATE TABLE t1
    (`Time_UTC` varchar(19))
;
    
INSERT INTO t1
    (`Time_UTC`)
VALUES
    ('2019-01-01 00:00:00'),
    ('2019-01-01 01:00:00'),
    ('2019-01-01 02:00:00'),
    ('2019-01-01 03:00:00'),
    ('2019-01-01 04:00:00'),
    ('2019-01-01 05:00:00'),
    ('2019-01-01 06:00:00'),
    ('2019-01-01 07:00:00'),
    ('2019-01-01 08:00:00'),
    ('2019-01-02 00:00:00'),
    ('2019-01-02 01:00:00'),
    ('2019-01-02 02:00:00'),
    ('2019-01-02 03:00:00'),
    ('2019-01-02 04:00:00'),
    ('2019-01-02 05:00:00'),
    ('2019-01-02 06:00:00'),
    ('2019-01-02 07:00:00'),
    ('2019-01-02 08:00:00')
SELECT Time_UTC
FROM (
select MIN(Time_UTC) AS Time_UTC,DATE(Time_UTC) , hour(Time_UTC) DIV 4  
from t1
GROUP BY DATE(Time_UTC), (hour(Time_UTC) DIV 4)) t1
ORDER BY Time_UTC;
| Time_UTC            |
| :------------------ |
| 2019-01-01 00:00:00 |
| 2019-01-01 04:00:00 |
| 2019-01-01 08:00:00 |
| 2019-01-02 00:00:00 |
| 2019-01-02 04:00:00 |
| 2019-01-02 08:00:00 |

DB<>在此拨弄

 类似资料:
  • 我试图解决以下问题:给定N个时间间隔,每个时间间隔指定为(开始,结束),不重叠,根据开始排序——找到一个包含给定日期的时间间隔。例如: 3人进入第一节,15人进入第四节,以此类推。 到目前为止,我有以下基本想法: 我们可以使用二进制搜索来找到相应的间隔(logn) 由于可能只有少数时间间隔较大,其余时间间隔较小,因此根据时间长短对itervals进行排序可能是值得的。然后,在统计上,大多数情况下,

  • 问题内容: 我在这里找到执行跟踪任务的最惯用的方法。 任务 : 将数据从通道写入文件。 问题 : 我有一个频道 我需要从通道读取并将从通道读取的值写入文件。我的问题基本上是鉴于 如果通道已满,请立即写入值 如果通道未满,则每5s写一次。 因此,从本质上讲,至少需要每5s将数据写入文件一次(假设至少每5s将数据填充到通道中一次) 请告诉我用最好的方式,并做到我上面的任务吗? 谢谢! 问题答案: 没有

  • 介绍 时间选择器,支持日期、年月、时分等维度,通常与弹出层组件配合使用。 引入 import { createApp } from 'vue'; import { DatetimePicker } from 'vant'; const app = createApp(); app.use(DatetimePicker); 代码演示 选择年月日 DatetimePicker 通过 type 属性

  • 时间选择组件。滚动选择交互,基于 Scrollpicker 实现。 Usage 全部引入 import { Timepicker } from 'beeshell'; 按需引入 import Timepicker from 'beeshell/dist/components/Timepicker'; Examples Timepicker 与 BottomModal 组合应用 Code 详细

  • 我想禁用日期时间选择器中的时间选择器。我正在使用一些参数,如picTime: false和form:"dd MM yyyy"。但是没有用...我正在使用http://eonasdan.github.io/bootstrap-datetimepicker/ Plzz给出解决方案

  • 问题内容: 这是我的门禁桌[dbo]。[tblAccess] 情况 假设员工将在同一天进出。 员工当天将有多个进出,因此需要先进后出。 需要每天获取详细信息,两个日期之间,按EmployeeId分组 员工的(InTime,InLocation)或(OUTTime,OutLocation)可以为null 如果(InTime)为null,则FirstInLocation和duration将为null,