0

SQL Server (TSQL) では、選択した注文アクティビティ間の日付の違いを見つける必要があります。

tblOrderActivity
OrderID  ActivityID  ActivityDate
1        1           4/16/2007 8:34:00 AM
1        2           4/16/2007 9:22:00 AM
2        1           4/16/2007 8:34:00 AM
3        1           4/16/2007 8:34:00 AM
3        2           4/16/2007 9:22:00 AM
4        1           4/16/2007 8:34:00 AM
4        2           4/16/2007 9:22:00 AM

とにかく...私はDATEDIFFについて知っています。したがって、私の現在の試みは次のようになります。

Select DATEDIFF( MI,
    (select tblOrderActivity.ActivityDate 
        from tblOrderActivity
        where ActivityID = 1), 
    (select tblOrderActivity.ActivityDate
        from tblOrderActivity
        where ActivityID = 2) ) 

AND OrderID = 1このコードは、または特定の番号を追加すると実際に機能します。問題は...すべての注文で機能する必要があることです。したがって、orderID を 1 つの列として返す必要があり、Activity=1 の日付から ActivityID=2 の日付を差し引いた結果が返されます。したがって、Order の 1、3、および 4 には 48 分かかります。注文 2 の場合、アクティビティ 2 がないため、そこに結果はありません (NULL だと思いますか?)。

編集:

わかりました、別の問題に直面しています。これが「満杯」のテーブルです。注文ごとに 2 つ以上のアクティビティがあります。

tblOrderActivity
OrderID  ActivityID  ActivityDate
1        1           4/16/2007 8:34:00 AM
1        2           4/16/2007 9:22:00 AM
1        3           4/16/2007 9:51:00 AM
1        4           4/16/2007 4:14:00 PM
2        1           4/16/2007 8:34:00 AM
3        1           4/16/2007 8:34:00 AM
3        2           4/16/2007 9:22:00 AM

これは私の現在のコードがどのように見えるかです:

    SELECT
t1.OrderID,
DATEDIFF(MI, t1.ActivityDate, t2.ActivityDate) as TurnTime1,
DATEDIFF(MI, t2.ActivityDate, t3.ActivityDate) as TurnTime2,
DATEDIFF(MI, t3.ActivityDate, t4.ActivityDate) as TurnTime3,
DATEDIFF(MI, t1.ActivityDate, t4.ActivityDate) as TurnTime4 
FROM tblOrderActivity t1 INNER JOIN tblOrderActivity t2 ON t1.OrderID = t2.OrderID INNER JOIN tblOrderActivity t3 ON t2.OrderID = t3.OrderID INNER JOIN tblOrderActivity t4 ON t3.OrderID = t4.OrderID WHERE t1.ActivityID = 1 AND t2.ActivityID = 2 AND t3.ActivityID = 3 AND t4.ActivityID = 4 

はぁ… コードブロックの整形が苦手みたいです。謝罪します。

いかなる場合でも。このコードを実行すると、オーダー 1 のみが返され、ターン タイム 1、2、3、4 などが返されます。残りの 2 つのオーダーは返されません。 4つの活動。

これを説明する方法はありますか?

4

2 に答える 2

0

ActivityID=1 と ActivityID=2 の違いのみが必要であり、2 つのアクティビティの 1 つだけを含む注文の行は必要ないと仮定します。

SELECT
    t1.OrderID,
    DATEDIFF(MI, t1.ActivityDate, t2.ActivityDate)
FROM tblOrderActivity t1
INNER JOIN tblOrderActivity t2 ON t1.OrderID = t2.OrderID
WHERE t1.ActivityID = 1 AND t2.ActivityID = 2
于 2013-11-04T23:28:29.137 に答える