【发布时间】:2021-04-02 02:27:14
【问题描述】:
| LogDateAndTime | BatchDate | TagLetter | Totaliser | ExpectedResult |
|---|---|---|---|---|
| 10-11-2020 09:06:14 | 10-11-2020 08:29:55 | A | 6319 | 31 |
| 10-11-2020 09:06:24 | 10-11-2020 08:29:55 | A | 6337 | 31 |
| 10-11-2020 09:08:14 | 10-11-2020 08:29:55 | B | 6355 | 31 |
| 10-11-2020 09:08:24 | 10-11-2020 08:29:55 | B | 6372 | 31 |
| 10-11-2020 09:08:34 | 10-11-2020 08:29:55 | B | 6378 | 31 |
| 10-11-2020 09:08:44 | 10-11-2020 08:29:55 | A | 6383 | 31 |
| 10-11-2020 09:09:14 | 10-11-2020 08:29:55 | A | 6388 | 31 |
| 10-11-2020 09:09:24 | 10-11-2020 08:29:55 | A | 6396 | 31 |
| 10-11-2020 09:09:34 | 10-11-2020 08:29:55 | B | 6409 | 31 |
| 10-11-2020 09:09:44 | 10-11-2020 08:29:55 | B | 6426 | 31 |
| 10-11-2020 09:10:24 | 10-11-2020 08:29:55 | B | 6442 | 31 |
上表有 LogDateAndTime(Primary_Key) 列,其中包含唯一的日期时间条目。 BatchDate 列在整个批次中保存相同的日期时间值。我需要为每个 TagLetter=A 实例计算 MAX(Totaliser)-MIN(Totaliser) 的总和,以便我应该忽略 TagLetter=B 中的值。在这种情况下,我的 ExpectedResult 将是 SUM[(6337-6319)+(6396-6383)]=31。我尝试了以下查询,但没有得到预期的结果。
SELECT SUM(
CASE
WHEN TagLetter='A' THEN MAX(Totaliser)-MIN(Totaliser)
ELSE 0.0
END
) OVER (PARTITION BY BatchDate) AS ExpectedResult
在这种情况下,它正在计算 6396-6319=77,这不是预期的结果。有人可以帮我得到正确的结果吗?
【问题讨论】:
-
你的 MySQL 版本是多少?
-
@ArunPalanisamy MySQL 8.0.22
-
您不想在
LogDateAndTime上进行分区吗?批次日期都是一样的,所以我希望最终结果是 77 -
实际上我看到 LogDateAndTime 中的所有日期都不同。你能解释一下你期望结果如何被划分吗?
标签: sum max window-functions min mysql-8.0