如何使用 clickhouse select 日期时间数据中的特定日期?
How to select certain date from datetime datas using clickhouse?
我的 clickhouse 数据库中有多个日期时间,我正在尝试在查询中使用 'group by' 选项以按特定间隔 select 日期。例如,我的数据库:(列的类型是 DateTime64(3, 'UTC')
worktime
--------------------
2020-01-11 14:57:24.000
2020-01-11 16:57:24.000
2020-01-11 17:56:36.000
2020-01-11 18:04:36.000
2020-01-11 19:07:48.000
2020-01-11 20:46:48.000
2020-01-12 02:23:00.000
2020-01-12 02:35:00.000
2020-01-12 02:44:12.000
2020-01-12 02:46:24.000
2020-01-12 03:07:12.000
2020-01-12 03:26:00.000
2020-01-12 03:29:00.000
2020-01-12 03:37:00.000
2020-01-13 03:54:48.000
2020-01-13 04:15:24.000
2020-01-13 04:35:36.000
2020-01-13 04:46:12.000
2020-01-13 05:08:00.000
2020-01-13 05:13:00.000
2020-01-13 05:21:12.000
2020-01-13 05:32:24.000
2020-01-13 03:54:48.000
2020-01-13 04:15:24.000
2020-01-13 04:35:36.000
2020-01-13 04:46:12.000
2020-01-13 05:08:00.000
2020-01-14 05:13:00.000
2020-01-14 05:21:12.000
2020-01-14 05:32:24.000
2020-01-14 03:54:48.000
2020-01-15 04:15:24.000
2020-01-15 04:35:36.000
2020-01-15 04:46:12.000
2020-01-15 05:08:00.000
2020-01-16 05:13:00.000
2020-01-16 05:21:12.000
2020-01-16 05:32:24.000
2020-01-16 03:54:48.000
2020-01-16 04:15:24.000
2020-01-17 04:35:36.000
2020-01-17 04:46:12.000
2020-01-17 05:08:00.000
2020-01-17 05:13:00.000
2020-01-18 05:21:12.000
2020-01-18 05:32:24.000
我想要的结果是按特定间隔对日期进行分组
首先我没有任何间隔地尝试
SELECT worktime FROM test2 GROUP BY worktime
它确实给了我分组日期的结果,但我想添加特定的间隔(比如 3 天、4 天、12 小时..)
我在谷歌上搜索并找到了一种使用 'interval' 函数的方法,但它并没有像我希望的那样工作..
SELECT worktime FROM test2 GROUP BY worktime - interval 3 day as worktime
但我没有得到 3 天间隔结果:((我得到的结果与 selecting 所有日期相同)
抱歉,我的问题太模糊了,我是 clickhouse 的新手,我几乎迷路了:(
我想要间隔日期分组的结果(例如2天)
2020-01-11, 2020-01-13, 2020-01-15 . . .
试试这个查询:
SELECT
-- toStartOfInterval(worktime, INTERVAL 3 DAY) interval
toStartOfInterval(worktime, INTERVAL 2 DAY) interval
FROM (
/* emulate the test dataset */
SELECT toDateTime64(dt, 3) AS worktime
FROM (
SELECT arrayJoin([
'2020-01-11 14:57:24.000',
'2020-01-11 16:57:24.000',
'2020-01-11 17:56:36.000',
'2020-01-11 18:04:36.000',
'2020-01-11 19:07:48.000',
'2020-01-11 20:46:48.000',
'2020-01-12 02:23:00.000',
'2020-01-12 02:35:00.000',
'2020-01-12 02:44:12.000',
'2020-01-12 02:46:24.000',
'2020-01-12 03:07:12.000',
'2020-01-12 03:26:00.000',
'2020-01-12 03:29:00.000',
'2020-01-12 03:37:00.000',
'2020-01-13 03:54:48.000',
'2020-01-13 04:15:24.000',
'2020-01-13 04:35:36.000',
'2020-01-13 04:46:12.000',
'2020-01-13 05:08:00.000',
'2020-01-13 05:13:00.000',
'2020-01-13 05:21:12.000',
'2020-01-13 05:32:24.000',
'2020-01-13 03:54:48.000',
'2020-01-13 04:15:24.000',
'2020-01-13 04:35:36.000',
'2020-01-13 04:46:12.000',
'2020-01-13 05:08:00.000',
'2020-01-14 05:13:00.000',
'2020-01-14 05:21:12.000',
'2020-01-14 05:32:24.000',
'2020-01-14 03:54:48.000',
'2020-01-15 04:15:24.000',
'2020-01-15 04:35:36.000',
'2020-01-15 04:46:12.000',
'2020-01-15 05:08:00.000',
'2020-01-16 05:13:00.000',
'2020-01-16 05:21:12.000',
'2020-01-16 05:32:24.000',
'2020-01-16 03:54:48.000',
'2020-01-16 04:15:24.000',
'2020-01-17 04:35:36.000',
'2020-01-17 04:46:12.000',
'2020-01-17 05:08:00.000',
'2020-01-17 05:13:00.000',
'2020-01-18 05:21:12.000',
'2020-01-18 05:32:24.000']) AS dt))
GROUP BY interval
ORDER BY interval
/*
-- INTERVAL 3 DAY
┌────────────interval─┐
│ 2020-01-09 00:00:00 │
│ 2020-01-12 00:00:00 │
│ 2020-01-15 00:00:00 │
│ 2020-01-18 00:00:00 │
└─────────────────────┘
-- INTERVAL 2 DAY
┌────────────interval─┐
│ 2020-01-11 00:00:00 │
│ 2020-01-13 00:00:00 │
│ 2020-01-15 00:00:00 │
│ 2020-01-17 00:00:00 │
└─────────────────────┘
*/
我的 clickhouse 数据库中有多个日期时间,我正在尝试在查询中使用 'group by' 选项以按特定间隔 select 日期。例如,我的数据库:(列的类型是 DateTime64(3, 'UTC')
worktime
--------------------
2020-01-11 14:57:24.000
2020-01-11 16:57:24.000
2020-01-11 17:56:36.000
2020-01-11 18:04:36.000
2020-01-11 19:07:48.000
2020-01-11 20:46:48.000
2020-01-12 02:23:00.000
2020-01-12 02:35:00.000
2020-01-12 02:44:12.000
2020-01-12 02:46:24.000
2020-01-12 03:07:12.000
2020-01-12 03:26:00.000
2020-01-12 03:29:00.000
2020-01-12 03:37:00.000
2020-01-13 03:54:48.000
2020-01-13 04:15:24.000
2020-01-13 04:35:36.000
2020-01-13 04:46:12.000
2020-01-13 05:08:00.000
2020-01-13 05:13:00.000
2020-01-13 05:21:12.000
2020-01-13 05:32:24.000
2020-01-13 03:54:48.000
2020-01-13 04:15:24.000
2020-01-13 04:35:36.000
2020-01-13 04:46:12.000
2020-01-13 05:08:00.000
2020-01-14 05:13:00.000
2020-01-14 05:21:12.000
2020-01-14 05:32:24.000
2020-01-14 03:54:48.000
2020-01-15 04:15:24.000
2020-01-15 04:35:36.000
2020-01-15 04:46:12.000
2020-01-15 05:08:00.000
2020-01-16 05:13:00.000
2020-01-16 05:21:12.000
2020-01-16 05:32:24.000
2020-01-16 03:54:48.000
2020-01-16 04:15:24.000
2020-01-17 04:35:36.000
2020-01-17 04:46:12.000
2020-01-17 05:08:00.000
2020-01-17 05:13:00.000
2020-01-18 05:21:12.000
2020-01-18 05:32:24.000
我想要的结果是按特定间隔对日期进行分组
首先我没有任何间隔地尝试
SELECT worktime FROM test2 GROUP BY worktime
它确实给了我分组日期的结果,但我想添加特定的间隔(比如 3 天、4 天、12 小时..)
我在谷歌上搜索并找到了一种使用 'interval' 函数的方法,但它并没有像我希望的那样工作..
SELECT worktime FROM test2 GROUP BY worktime - interval 3 day as worktime
但我没有得到 3 天间隔结果:((我得到的结果与 selecting 所有日期相同)
抱歉,我的问题太模糊了,我是 clickhouse 的新手,我几乎迷路了:(
我想要间隔日期分组的结果(例如2天)
2020-01-11, 2020-01-13, 2020-01-15 . . .
试试这个查询:
SELECT
-- toStartOfInterval(worktime, INTERVAL 3 DAY) interval
toStartOfInterval(worktime, INTERVAL 2 DAY) interval
FROM (
/* emulate the test dataset */
SELECT toDateTime64(dt, 3) AS worktime
FROM (
SELECT arrayJoin([
'2020-01-11 14:57:24.000',
'2020-01-11 16:57:24.000',
'2020-01-11 17:56:36.000',
'2020-01-11 18:04:36.000',
'2020-01-11 19:07:48.000',
'2020-01-11 20:46:48.000',
'2020-01-12 02:23:00.000',
'2020-01-12 02:35:00.000',
'2020-01-12 02:44:12.000',
'2020-01-12 02:46:24.000',
'2020-01-12 03:07:12.000',
'2020-01-12 03:26:00.000',
'2020-01-12 03:29:00.000',
'2020-01-12 03:37:00.000',
'2020-01-13 03:54:48.000',
'2020-01-13 04:15:24.000',
'2020-01-13 04:35:36.000',
'2020-01-13 04:46:12.000',
'2020-01-13 05:08:00.000',
'2020-01-13 05:13:00.000',
'2020-01-13 05:21:12.000',
'2020-01-13 05:32:24.000',
'2020-01-13 03:54:48.000',
'2020-01-13 04:15:24.000',
'2020-01-13 04:35:36.000',
'2020-01-13 04:46:12.000',
'2020-01-13 05:08:00.000',
'2020-01-14 05:13:00.000',
'2020-01-14 05:21:12.000',
'2020-01-14 05:32:24.000',
'2020-01-14 03:54:48.000',
'2020-01-15 04:15:24.000',
'2020-01-15 04:35:36.000',
'2020-01-15 04:46:12.000',
'2020-01-15 05:08:00.000',
'2020-01-16 05:13:00.000',
'2020-01-16 05:21:12.000',
'2020-01-16 05:32:24.000',
'2020-01-16 03:54:48.000',
'2020-01-16 04:15:24.000',
'2020-01-17 04:35:36.000',
'2020-01-17 04:46:12.000',
'2020-01-17 05:08:00.000',
'2020-01-17 05:13:00.000',
'2020-01-18 05:21:12.000',
'2020-01-18 05:32:24.000']) AS dt))
GROUP BY interval
ORDER BY interval
/*
-- INTERVAL 3 DAY
┌────────────interval─┐
│ 2020-01-09 00:00:00 │
│ 2020-01-12 00:00:00 │
│ 2020-01-15 00:00:00 │
│ 2020-01-18 00:00:00 │
└─────────────────────┘
-- INTERVAL 2 DAY
┌────────────interval─┐
│ 2020-01-11 00:00:00 │
│ 2020-01-13 00:00:00 │
│ 2020-01-15 00:00:00 │
│ 2020-01-17 00:00:00 │
└─────────────────────┘
*/