2017-01-01 120 views
1

我需要一个非常类似于SELECT within SELECT with TOP的SQL查询的帮助。
但是,我需要最新的日期和该日期时间戳的值。使用时SQL以获取每种类型的最新日期时间行

SELECT 
    (SELECT TOP(1) NumericValue 
    FROM Datum 
    WHERE ChannelId = test.ChannelId 
    ORDER BY [DateTime] DESC) AS NumericValue, 
    (SELECT TOP(1) [DateTime] 
    FROM Datum 
    WHERE ChannelId = test.ChannelId 
    ORDER BY [DateTime] DESC) AS DataTime, 
    ChannelId, Diag, ChannelDescription 
FROM 
    Channel as test 
WHERE 
    InstrumentID = 3 

这给了我数值列中的最高值而不是最新值。它给了我最新的日期时间,但我也需要它的价值。

+1

您的订单正在递减,所以如果您想要从当前输出的最后一行,您应该按升序排列。将DESC替换为ASC – user3606329

回答

0

试试这个,如果你只是想最大[日期时间],其对应NumericValue

SELECT TOP(1) 
    test.ChannelId, test.Diag, test.ChannelDescription, test.[DateTime], sub.MaxNumericValueForDateTime 
FROM 
    Channel test 
    CROSS APPLY 
    (
    SELECT MAX(NumericValue) AS MaxNumericValueForDateTime 
    FROM Channel 
    WHERE InstrumentID = 3 AND [DateTime]=test.DateTime 
    ) sub 
WHERE 
    InstrumentID = 3 
ORDER BY 
    [DateTime] DESC; 
0

试试这个,

SELECT DISTINCT a.ChannelId, a.Diag, a.ChannelDescription, a.NumericValue, a.DateTime 
FROM Channel a 
    INNER JOIN (SELECT ChannelId, MAX(DateTime) Max_DateTime 
      FROM Channel 
      GROUP BY ChannelId) b ON a.ChannelId = b.ChannelId AND a.DateTime = b.Max_DateTime 
WHERE a.InstrumentID = 3 
0

我认为你可以使用这样的查询:

;WITH t AS (
    SELECT * 
     , ROW_NUMBER() OVER (ORDER BY [DateTime] DESC) rn 
    FROM Datum 
) 
SELECT 
    t.NumericValue, t.[DateTime] 
FROM 
    Channel AS test CROSS JOIN t 
WHERE 
    t.rn = 1 AND 
    test.InstrumentId = 3;