【发布时间】:2011-05-28 14:44:35
【问题描述】:
我有一个表,它返回一个值的历史记录以及当前值的历史记录,每个都有一个日期。
最早的日期是主要记录。如果值更改,则使用旧值创建新记录,并使用新值更新主记录。如果再次发生这种情况,则会创建第三条记录,其中包含现在的旧值。
所以如果值从 4 开始,变为 2,然后再次变为 1。记录将去
1
4
2
我目前正在表上创建一个内部连接,如下所示,它获取上述 3 条记录的最大日期,即 2.. 我需要的实际值是 4. 最简单的判断方法如果记录是历史记录,则 TriageEndDateTime 为 NULL。
INNER JOIN (SELECT EmergencyAttendanceId,MIN(SourceCreateDateTime) as Max_Date
FROM FactEmergencyAttendanceTriageDetail
GROUP BY EmergencyAttendanceId) AS EAiD
ON EAiD.EmergencyAttendanceId = FactEmergencyAttendanceTriageDetail.EmergencyAttendanceId
AND EAiD.Max_Date = FactEmergencyAttendanceTriageDetail.SourceCreateDateTime
我需要做的是选择第二条记录,但前提是它存在。所以类似这样的事情。
SELECT EmergencyAttendanceId,MIN(SourceCreateDateTime) as Max_Date
FROM FactEmergencyAttendanceTriageDetail
WHERE IF COUNT(EmergencyAttendanceId) > 1 THEN TriageEndDateTime Is NULL ELSE NOT NULL
GROUP BY EmergencyAttendanceId
inside the INNER JOIN.
谁能帮我解决这个问题?
样本数据
在上述情况下,记录 2 是我所追求的。
【问题讨论】:
-
从数据样本中预期的样本数据和样本结果行将是一个很好的起点。对于阅读问题的人来说,这通常比广泛解释实际目标更清楚。一张图片胜过千言万语!
-
所以,如果我理解正确的话,你需要最旧的记录才能出来,对吧?
-
不,那是踢球者。它是创造的第一个历史记录。见编辑中的图片。在那种情况下,2 是原始值,然后更改为 1,然后再次更改为 2
-
听起来您想要上面的第二条记录,但使用第一条记录的 SourceCreateDateTime。对吗?
-
我不关心日期。我就在第二条记录中的 2 之后。日期用于对记录进行排序,并重新加入我的主选择查询。查看第一个 INNER JOIN,它需要带回第二个记录。
标签: sql tsql case where-clause where