我的table(表1)
+----+------------+---------+------------+
| id | Date | Houses | kW_measure |
+----+------------+---------+------------+
| 01 | 01/01/2020 | House_A | 2020 |
| 02 | 01/01/2020 | House_B | 2100 |
| 03 | 01/01/2020 | House_C | 2200 |
| 04 | 01/02/2020 | House_A | 2040 |
| 05 | 01/02/2020 | House_B | 2125 |
| 06 | 01/02/2020 | House_C | 2210 |
| 07 | 01/03/2020 | House_A | 2050 |
| 08 | 01/03/2020 | House_B | 2150 |
| 09 | 01/03/2020 | House_C | 2220 |
+----+------------+---------+------------+
我做了一个旋转动作,很好:http://sqlfiddle.com/#!18/45b9d/1/0号
+------------+----------+----------+----------+
| Date | House_A | House_B | House_C |
+------------+----------+----------+----------+
| 01/01/2020 | 2020 | 2100 | 2200 |
| 01/02/2020 | 2040 | 2125 | 2210 |
| 01/03/2020 | 2050 | 2150 | 2220 |
+------------+----------+----------+----------+
现在我需要计算度量值之间的差异,得到如下结果:
+------------+----------+-------+
| Date | House_A | Daily |
+------------+----------+-------+
| 01/01/2020 | 2020 | 0 |
| 01/02/2020 | 2040 | 20 |
| 01/03/2020 | 2050 | 10 |
+------------+----------+-------+
但如果我不使用聚合,结果会产生空单元格-http://sqlfiddle.com/#!18/45b9d/5/0号
SELECT (SELECT DISTINCT a.Date)
, SUM(CASE WHEN a.Houses = 'House_A' THEN a.kW_measure END) as 'House_A'
, a.Kw_Measure - (SELECT MIN(b.kW_Measure) FROM Table1 b WHERE b.Houses = 'House_A'
AND b.Date < a.Date)
FROM Table1 a
GROUP BY Date, kW_Measure
ORDER BY Date ASC
如果我真的使用它,我会得到这样的信息:
无法对包含聚合或子查询的表达式执行聚合函数。
任何帮助都会很好。
3条答案
按热度按时间6tdlim6h1#
可以使用窗口函数。从现有的条件聚合查询开始,这将计算每套房子当前日期和上一日期之间的消费差异:
子查询在技术上不是必需的,但它避免了重复条件查询
sum()
两次。ijnw1ujt2#
如果你想让房子像结果显示的那样成为一个独立的柱子,你可以使用:
你似乎每个房子每个日期只有一行,所以聚合似乎没有必要。
t8e9dugd3#
你可以用
lag
,这是演示。输出: