2017-02-08 8 views
0

私は履歴テーブルのようなレコードを持つテーブルを持っています。問題別のSQLクエリグループ

次のクエリを作成して目的の結果を得ました。しかし、それは私に私が望む最終結果を与えるものではありません。

DECLARE @Customer_Id BIGINT=4 
DECLARE @Month INT=2 

SELECT 
    FH.UniqueFileId,FH.DocumentNo,MIN(FH.DateStamp) AS ReceivedTime,MAX(FH.DateStamp) SentTime 
FROM 
    [dbo].[FileMovement_History] FH 
    INNER JOIN [dbo].[User_Master] UM ON UM.User_Id=FH.User_Id 
WHERE 
    FH.UniqueFileId Is Not NULL AND FH.UniqueFileId!='' 
    AND (@Customer_Id IS NULL OR UM.Customer_id = @Customer_Id) 
    AND MONTH(FH.DateStamp)[email protected] 
GROUP BY 
    FH.UniqueFileId,FH.DocumentNo 
Order BY 
    FH.UniqueFileId 

╔════════════════╦══════════════════════╦═════════════════════════════╦═════════════════════════════╗ 
║ UniqueFileId ║  DocumentNo  ║  ReceivedTime   ║   SentTime   ║ 
╠════════════════╬══════════════════════╬═════════════════════════════╬═════════════════════════════╣ 
║ HS5536387_10HE ║ NULL     ║ 2017-02-02 13:13:37.3451906 ║ 2017-02-02 13:19:19.0114047 ║ 
║ HS5536387_10HE ║ 120097583/MC/CL7 ║ 2017-02-02 13:19:18.9801503 ║ 2017-02-02 13:19:19.1051605 ║ 
║ HS5536387_1HE ║ NULL     ║ 2017-02-02 13:13:34.6887572 ║ 2017-02-02 13:21:37.7405652 ║ 
║ HS5536387_1HE ║ 3701341    ║ 2017-02-02 13:21:37.6936641 ║ 2017-02-02 13:21:37.8499434 ║ 
║ HS5536387_3HE ║ NULL     ║ 2017-02-02 13:13:35.5950873 ║ 2017-02-02 13:19:19.9958519 ║ 
╚════════════════╩══════════════════════╩═════════════════════════════╩═════════════════════════════╝ 

は、私は日付スタンプと日付スタンプの最大の最小値を持つ1 UniqueFileIdごとに1つのエントリを必要とする次のような結果が欲しいです。余分な列が必要なのは、最小日時と最大日時の合計時間を示します。

╔════════════════╦══════════════════════╦═════════════════════════════╦═════════════════════════════╗ 
║ UniqueFileId ║  DocumentNo  ║  ReceivedTime   ║   SentTime   ║ 
╠════════════════╬══════════════════════╬═════════════════════════════╬═════════════════════════════╣ 
║ HS5536387_10HE ║ 120097583/MC/CL7 ║ 2017-02-02 13:13:37.3451906 ║ 2017-02-02 13:19:19.0114047 ║ 
║ HS5536387_1HE ║ 3701341    ║ 2017-02-02 13:13:34.6887572 ║ 2017-02-02 13:21:37.7405652 ║ 
║ HS5536387_3HE ║ NULL     ║ 2017-02-02 13:13:35.5950873 ║ 2017-02-02 13:19:19.9958519 ║ 
╚════════════════╩══════════════════════╩═════════════════════════════╩═════════════════════════════╝ 

答えて

1

のみUniqueFileIdフィールドでグループ化を行い、代わりにこの列の値MIN(DocumentNo)取る:あなたが送信され、受信した時刻の時間差を表示したい場合は

SELECT FH.UniqueFileId, 
     MIN(FH.DocumentNo) AS DocumentNo, 
     MIN(FH.DateStamp) AS ReceivedTime, 
     MAX(FH.DateStamp) AS SentTime 
FROM [dbo].[FileMovement_History] FH 
INNER JOIN [dbo].[User_Master] UM 
    ON UM.User_Id = FH.User_Id 
WHERE COALESCE(FH.UniqueFileId, '') <> '' AND 
     (@Customer_Id IS NULL OR UM.Customer_id = @Customer_Id) AND 
     MONTH(FH.DateStamp) = @Month 
GROUP BY FH.UniqueFileId 
ORDER BY FH.UniqueFileId 

をフォーマットhh:mm:ssを使用すると、次の式を使用できます。

CAST(DATEDIFF(HOUR, MIN(FH.DocumentNo), MAX(FH.DocumentNo)) AS NVARCHAR(200)) + ":" + 
CAST(DATEDIFF(MINUTE, MIN(FH.DocumentNo), MAX(FH.DocumentNo)) % 60 AS NVARCHAR(200)) +":" + 
CAST(DATEDIFF(SECOND, MIN(FH.DocumentNo), MAX(FH.DocumentNo)) % 60 AS NVARCHAR(200)) 
+0

パーフェクト..望ましい結果が得られます。同じクエリでReceivedTimeとSentTimeの差をhh:mm:ss形式で表示することは可能ですか?あるいは、これを実行するために外部クエリを使用する必要があります。 – Darshan4742