你好,这是我的疑问:
MariaDB [PV_Anlage]>
SELECT created_at, verbrauch_ges
FROM pv_metrics
group by DATE(created_at)
ORDER BY ID DESC limit 20;
+---------------------+---------------+
| created_at | verbrauch_ges |
+---------------------+---------------+
| 2025-03-23 00:00:04 | 5628.79 |
| 2025-03-22 00:00:06 | 5622.54 |
| 2025-03-21 00:00:11 | 5615.44 |
| 2025-03-20 00:00:13 | 5609.49 |
| 2025-03-19 00:00:17 | 5605.4 |
| 2025-03-18 00:00:00 | 5600.45 |
| 2025-03-17 00:00:03 | 5591.36 |
| 2025-03-16 00:00:09 | 5585.2 |
| 2025-03-15 00:00:16 | 5578.96 |
| 2025-03-14 00:00:04 | 5571.1 |
| 2025-03-13 00:00:07 | 5560.34 |
| 2025-03-12 00:00:10 | 5550.54 |
| 2025-03-11 00:00:13 | 5540.12 |
| 2025-03-10 00:00:16 | 5534.81 |
| 2025-03-09 00:00:18 | 5528.48 |
| 2025-03-08 00:00:17 | 5521.71 |
| 2025-03-07 00:00:11 | 5515.27 |
| 2025-03-06 00:00:14 | 5510.17 |
| 2025-03-05 00:00:06 | 5504.08 |
| 2025-03-04 00:00:09 | 5497.21 |
+---------------------+---------------+
这是结果,因为我每 20 秒写入一次值。我选择了当天的第一个值,所以现在我需要天数之间的差异。我尝试使用 LAG() 函数,但我不知道如何将该函数纳入常规查询。
最好的问候弗兰克
您的查询利用了臭名昭著的 MySQL 扩展 GROUP BY。这意味着一堆令人困惑的不确定性。
ANY_VALUE)_告诉 MySQL 它可以任意从组中选择某个值。这样你将得到不可预测的值。
这使得我们很难从您的示例中猜测您的意图。
听起来你想要一个每个日历日一行的结果集,显示当天
verbrauch_ges
最早日期戳的值之间的差异created_at
以下是具体操作方法。
created_at
首先,您需要获得每天最早时间的结果集。然后您需要每天提取一个值。
如果您在同一时间有多个观察结果,则可以使用 AVG() 来做一些合理的操作
created_at
。您也可以使用 MAX() 或 MIN()。最后,现在您有一个带有列的虚拟表
tag
,erste_verbraucht_ges
您可以对其执行 LAG 选择来获得所需的结果。在简单情况下,
如果我们认为的值
verbrauch_ges
单调递增,则可以按如下方式获得当天的最小(初始)值对于 LAG 函数,我们使用值
min(verbrauch_ges)
,因为 SELECT 子句中的 LAG 函数将在 GROUP BY 之后执行。这在语义上等同于
MariaDb 允许使用
order by created_at
LAGorder by date(created_at)
功能。常见情况是从表和 INNER JOIN 表中选择目标行到此选择
或者
示例
这就是我需要的答案或疑问。
谢谢