连接两个 Date_Time 列时如何保留秒数

问题描述 投票:0回答:2

我正在从两个不同的专栏中获取最新更新。要么 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

我尝试将两列连接成一列。它成功运行,但不保留秒数。

sql datetime concatenation max milliseconds
2个回答
1
投票
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

0
投票

CONCAT
用于连接两个字符串。那不是你所描述的。

假设:
P1DT 和 P2Dt 是日期时间或类似的数据类型。
对于每一行,其中一列恰好为 NULL。
您想报告这两列中的任何一个不为空。

解决方案是一个非常简单的查询。它不涉及子查询或窗口函数。

SELECT StudyNum
, SerialNum
, PuffCount
, MAX(COALESCE(P1DT, P2DT) AS MaxDate
FROM P3 P3A
GROUP BY StudyNum
, SerialNum
, PuffCount
© www.soinside.com 2019 - 2024. All rights reserved.