2017-01-01 2 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; 
関連する問題