我正在从两个不同的专栏中获取最新更新。要么 P1DT 为空,要么 P2Dt 为空,但绝不会两者都为空。我已经成功地将两列合并为一列,但需要保留数字末尾的秒数......最好的方法是什么?
WITH tblDT AS
(
SELECT DISTINCT
StudyNum,
SerialNum,
PuffCount,
CONCAT((SELECT MAX(P1DT)
FROM P3 P3B
WHERE P3B.SerialNum = P3A.SerialNum
AND P3B.StudyNum = P3A.StudyNum),
(SELECT MAX(P2DT)
FROM P3 P3B
WHERE P3B.SerialNum = P3A.SerialNum
AND P3B.StudyNum = P3A.StudyNum)) AS MaxDate
FROM
P3 P3A
)
SELECT *
FROM tblDT
我尝试将两列连接成一列。它成功运行,但不保留秒数。
SELECT a.StudyNum, a.SerialNum, a.PuffCount
, COALESCE(MAX(b.P1DT), MAX(b.P2DT)) MaxDate
FROM P3 a
INNER JOIN P3 b on b.SerialNum = a.SerialNum AND b.StudyName = a.StudyName
GROUP BY a.StudyName, a.SerialNum, a.Puffcount
如果你真的不需要
PuffCount
,知道它对于给定的StudyName
和SerialNum
总是相同的,或者可以从聚合函数中推断出来,我们也可以删除JOIN。
嗯……想多了,我觉得我们也可以用窗口函数来做:
SELECT DISTINCT a.StudyNum, a.SerialNum, a.PuffCount
,COALESCE(
First_Value(P1DT) over (PARTITION BY StudyNum, SerialNum ORDER BY P1DT DESC),
First_Value(P2DT) over (PARTITION BY StudyNum, SerialNum ORDER BY P2DT DESC)
) MAXDate
FROM P3
CONCAT
用于连接两个字符串。那不是你所描述的。
假设:
P1DT 和 P2Dt 是日期时间或类似的数据类型。
对于每一行,其中一列恰好为 NULL。
您想报告这两列中的任何一个不为空。
解决方案是一个非常简单的查询。它不涉及子查询或窗口函数。
SELECT StudyNum
, SerialNum
, PuffCount
, MAX(COALESCE(P1DT, P2DT) AS MaxDate
FROM P3 P3A
GROUP BY StudyNum
, SerialNum
, PuffCount