【发布时间】:2019-06-11 01:25:35
【问题描述】:
现在我只是汇总了用户工作了多少天。我正在尝试将此查询更改为最连续工作天数。
u12345 是 4,u1 是 2。
这可能与 BigQuery 语句有关吗?
编辑我是 Kind of close,有以下查询,但我的 u1 得到 3 而不是 2。
SELECT MIN(e.timestamp) as date_created, e.uid, COUNT(e.uid) + 1 AS streak
FROM OnSite e
LEFT JOIN OnSite ee
ON e.uid = ee.uid
AND DATE(e.timestamp) = DATE(DATE_ADD(ee.timestamp, INTERVAL -1 DAY))
WHERE ee.uid IS NOT NULL
GROUP BY e.uid;
架构 (MySQL v5.7)
CREATE TABLE OnSite
(`uid` varchar(55), `worksite_id` varchar(55), `timestamp` datetime)
;
INSERT INTO OnSite
(`uid`, `worksite_id`, `timestamp`)
VALUES
("u12345", "worksite_1", '2019-01-01'),
("u12345", "worksite_1", '2019-01-02'),
("u12345", "worksite_1", '2019-01-03'),
("u12345", "worksite_1", '2019-01-04'),
("u12345", "worksite_1", '2019-01-06'),
("u1", "worksite_1", '2019-01-01'),
("u1", "worksite_1", '2019-01-02'),
("u1", "worksite_1", '2019-01-05'),
("u1", "worksite_1", '2019-01-06')
;
查询 #1
SELECT uid, COUNT(DISTINCT timestamp) Total
FROM OnSite
GROUP BY uid;
| uid | Total |
| ------ | ----- |
| u1 | 4 |
| u12345 | 5 |
【问题讨论】:
-
查询后可能需要处理数据。我不知道这样的查询。
-
@Cochu 我添加了一个编辑,我正在接近,但我是一个数字
-
u12345 将是 3,而不是 4,因为“2019-01-04”没有第二天
-
看来@Simonare 证明我错了,只要您使用的是 MySQL 8
-
@bryan 如果答案并不能真正解决您的问题,您应该让问题保持开放状态,这样您就可能得到一个对您有用的解决方案(您可以只投票赞成答案)。我已在您的问题中添加了
bigquery标签,因此答案应仅限于在那里工作的代码。
标签: mysql google-bigquery gaps-and-islands