我正在尝试使用时间序列数据创建数据库,并且我试图将4个不同的查询融合在一起以形成单个插入的一组数据。
SELECT 'some date' AS date, a, b, COUNT(foo) AS c
FROM 'my_db'
WHERE date BETWEEN dateadd(hour,-24,'some date') AND dateadd(hour,-23,'some date')
GROUP BY a, b
ORDER BY a, b ASC;
SELECT a, b, COUNT(foo) AS c1
FROM 'my_db'
WHERE (date BETWEEN dateadd(hour,-24,'some date') AND dateadd(hour,-23,'some date'))
AND (foo = 'some value')
GROUP BY a, b
ORDER BY a, b ASC;
SELECT a, b, COUNT(foo) AS c2
FROM 'my_db'
WHERE (date BETWEEN dateadd(hour,-24,'some date') AND dateadd(hour,-23,'some date'))
AND (foo = 'some other value')
GROUP BY a, b
ORDER BY a, b ASC;
如果它们在单独的表中,我觉得我可以分别对字段a
和b
进行完全外部联接,然后用0填充空白字段。
最后,我将能够进入数据集以使单个插入看起来像这样:
| date | a | b | c | c1 | c2 |
--------------------------------------------------------------------
| 2019-08-27 12:00:00 | dog | woof | 100 | 76 | 26 |
| 2019-08-27 12:00:00 | cat | meow | 82 | 33 | 49 |
| 2019-08-27 12:00:00 | pony | neigh | 300 | 0 | 300 |
是否有一种干净的方法将这些查询组合成一个查询,以便我可以批量插入格式化的集?
还是有解决问题的更聪明的方法?
答案 0 :(得分:2)
我认为您需要条件聚合:
SELECT 'some date' AS date, a, b, COUNT(foo) AS c,
SUM(CASE WHEN foo = 'some value' THEN 1 ELSE 0 END) as c1,
SUM(CASE WHEN foo = 'some other value' THEN 1 ELSE 0 END) as c2
FROM 'my_db'
WHERE date BETWEEN dateadd(hour, -24, 'some date') AND dateadd(hour, -23, 'some date')
GROUP BY a, b
ORDER BY a, b ASC;