【发布时间】:2021-12-24 20:45:52
【问题描述】:
让我们假设一个表有很多列并且一个 Temporal 表正在记录它的历史。当它发生变化时,我需要知道一个字段。
| Number | VersionStartDate |
|---|---|
| 991281 | 2021-11-12 08:27:11 |
| 991281 | 2021-11-12 08:20:11 |
| NULL | 2021-11-12 07:20:11 |
| NULL | 2021-11-12 06:20:11 |
| 771281 | 2021-11-11 08:26:11 |
| NULL | 2021-11-11 08:25:11 |
| 661281 | 2021-11-10 08:24:11 |
| NULL | 2021-11-10 08:22:11 |
| 661281 | 2021-11-10 08:21:11 |
| 551281 | 2021-11-09 08:20:11 |
我需要获取每个值,以及它改变的那一刻。我还需要知道它是否被设置为 NULL,所以这个查询没有给出我需要的。
SELECT
Number,
MIN(VersionStartDate) [Date]
FROM _TABLE_
GROUP BY
Number
ORDER BY
[Date] DESC
结果应该是
| Number | VersionStartDate |
|---|---|
| 991281 | 2021-11-12 08:20:11 |
| NULL | 2021-11-12 06:20:11 |
| 771281 | 2021-11-11 08:26:11 |
| NULL | 2021-11-11 06:25:11 |
| 661281 | 2021-11-10 08:24:11 |
| NULL | 2021-11-10 08:22:11 |
| 661281 | 2021-11-10 08:21:11 |
| 551281 | 2021-11-09 08:20:11 |
【问题讨论】:
-
您在这里看到的似乎是一个孤岛问题。
MIN本身是行不通的。 -
每个非空数字只需要一次吗?
-
@Larnu 谢谢,知道它的调用将如何帮助我找到解决方案
-
@jarlh 如果还有另一个值 551281、NULL、551281,那么我想要两个,如果它在 (551281,551281) 之后,那么我想要它不同
-
添加反映这一点的样本数据,并相应地调整预期结果。
标签: sql sql-server tsql gaps-and-islands