我有一个表,它返回一个值的历史记录,以及当前的值,每个都有一个日期。
最早的日期是主要记录。如果更改了值,则使用旧值创建新记录,并使用新值更新主记录。如果再次发生这种情况,则会创建第三条记录,其中包含现在的旧值。
因此,如果值从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是我追求的。
答案 0 :(得分:1)
试试这个:
SELECT EmergencyAttendanceId
case when count(EmergencyAttendanceId) > 1 then
MIN
(
case when TriageDateTime is null then SourceCreateDateTime end
)
else
min(SourceCreateDateTime)
end as max_date
FROM FactEmergencyAttendanceTriageDetail
GROUP BY EmergencyAttendanceId
答案 1 :(得分:-1)
使用CASE
代替您的伪代码:
WHERE TriageEndDateTime =
CASE WHEN EmergencyAttendanceId > 1 THEN NULL ELSE NOT NULL END