日付に基づいて2つのSQLテーブルを照合する必要がありますが、date +1を確認する必要があります

アンディR

私はSQLにかなり慣れていないので(約9か月)、SQL Server2012を使用してこの問題を理解しようとして困惑しています。

次のような2つのテーブルを一致させようとしています。

Shift

    Date       |    Name    | Shift
    01-01-2013 | Dan Smith  | Night
    01-02-2013 |John Johnson| Night
    01-03-2013 |John Johnson| Night

Sales

    Date       |    Name    | Sales
    01-01-2013 | Dan Smith  | 3
    01-02-2013 | Dan Smith  | 5
    01-02-2013 |John Johnson| 4
    01-03-2013 |John Johnson| 7
    01-04-2013 |John Johnson| 2

問題は、シフトテーブルにシフトの開始日しか含まれていないことです。これは、2日間にわたって行われるため、夜間シフトでは問題になります。夜勤の売上は、発生時にタイムスタンプが付けられるため、両方の日に発生しているように見えます。つまり、名前とシフト日付に基づいてテーブルをリンクしようとしただけで、翌日のシフトがない場合、午前12:00以降の売上データが失われます。翌日にシフトがあるかどうかを確認し、シフトしていない場合は、翌日の売上データを前日の売上に追加する方法を探しています。

現在、私のコードは次のようになっています。

Select
   st.Name,
   st.Date,
   st.Shift,
   sl.Sales
From 
   Shift st
right join 
   Sales as sl on sl.Name = st.Name
               and sl.Date = Case
                               When sl.Date = DATEADD(DD, 1, st.Date)
                               Then DATEADD(DD,1, st.Date)
                               Else st.Date
                             End

これは、sales.date = shift.dateを使用したときから欠落しているデータを取得しますが、重複データが大量に発生することにもなります。これが単純な場合はお詫びしますが、営業担当者に翌日のシフトがないかどうかを確認し、その担当者の翌日の営業データを前日に追加するだけの良い方法を見つけることができませんでした。

編集:望ましい結果は次のようになります:

ShiftDate  |    Name    | Shift | Sales
01-01-2013 | Dan Smith  | Night | 8
01-02-2013 |John Johnson| Night | 4
01-03-2013 |John Johnson| Night | 9

シフトごとの正確な売上高が100%正確でなくてもかまいませんが、翌日にシフトがない場合は、翌日の売上データを取得する必要があります。

この問題を完全に修正し、しばらくの間モデルの変更に取り組んでいるので、モデルの変更が大好きです。残念ながら、販売データは外部ソースから取得され、データベースにインポートされます。これまでのところ、正確なタイムスタンプを提供することを望まない/不可能でした。

ラマック

わかりました、これは意図したとおりに機能します。

;WITH Sales2 AS
(
    SELECT A.*, CASE WHEN B.[Date] IS NULL THEN 1 ELSE 0 END LastShift
    FROM Sales A
    LEFT JOIN Sales B
      ON A.Name = B.Name
      AND A.[Date] = DATEADD(DAY,-1,B.[Date])
)
SELECT  A.[Date],
        A.Name,
        A.Shift,
        SUM(B.Sales) Sales
FROM Shift A
LEFT JOIN Sales2 B
  ON A.Name = B.Name
  AND CASE 
        WHEN A.Shift <> 'Night' AND A.[Date] = B.[Date] 
            THEN 1
        WHEN A.Shift = 'Night' AND B.LastShift = 0 AND A.[Date] =  B.[Date]
            THEN 1 
        WHEN A.Shift = 'Night' AND B.LastShift = 1 AND A.[Date] = DATEADD(DAY,-1,B.[Date]) 
            THEN 1 
        ELSE 0 
      END = 1
GROUP BY A.[Date],
         A.Name,
         A.Shift

これは、このソリューションのデモを含むsqlfiddleです。

そして結果は次のとおりです。

╔═════════════════════════╦══════════════╦═══════╦═══════╗
║          Date           ║     Name     ║ Shift ║ Sales ║
╠═════════════════════════╬══════════════╬═══════╬═══════╣
║ 2013-01-01 00:00:00.000 ║ Dan Smith    ║ Night ║     8 ║
║ 2013-01-02 00:00:00.000 ║ John Johnson ║ Night ║     4 ║
║ 2013-01-03 00:00:00.000 ║ John Johnson ║ Night ║     9 ║
╚═════════════════════════╩══════════════╩═══════╩═══════╝

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

いくつかの条件に基づいて、結合テーブルを変更する必要があります

分類Dev

テーブルセル(クリック不可)のIDを見つけ、それに基づいて別の行を確認する必要があります

分類Dev

SQL-行が別のテーブルと持つ関係の数に基づいて、テーブルの値を更新する必要があります

分類Dev

日付間の日数(日付が重複していないか条件を確認する必要があります)

分類Dev

Excel:1つの列の2つの列(日付の間)の日付範囲に基づいて合計する必要があります

分類Dev

Oracle Sql-2つのテーブルがあり、table2の結果でtable1をフィルタリングする必要があります。table2が空の場合、table1のすべてを返す必要があります

分類Dev

オブジェクトの2つの配列は、他のキーに基づいて1つをフィルタリングする必要があります

分類Dev

「2つの」ステップに基づいてテーブルからレコードを削除する必要があります

分類Dev

2つのテーブルを結合します(1つは連結する必要があります)

分類Dev

2つのテーブルを結合します(1つは連結する必要があります)

分類Dev

変数がnullかどうかに基づいて、テーブルからレコードを選択する必要があります。nullの場合、条件と等しくないことを確認します

分類Dev

1つのキーに基づいて多くの値を格納する必要があります

分類Dev

夏時間を確認する必要があります

分類Dev

1に等しい2つの日付の間にダミー変数を作成する必要があります

分類Dev

最高時刻の特定の日付について、あるテーブルから別のテーブルに1行のデータだけをINSERTするために、どのSQL WHERE条件を使用する必要がありますか?

分類Dev

PropTypesを追加する場合、typeofを確認する必要がありますか?

分類Dev

1つのwhere条件に基づいてすべての行を除外する必要があります

分類Dev

列の値に基づいて日付が異なる2つのテーブルを結合しますか?

分類Dev

terraformリソースは、変数に基づいて複数のCloudWatchアラームを作成する必要があります。これはプランで確認されていますが、1つのアラームのみをデプロイします。

分類Dev

現在の日付に基づいて重複を選択する必要があります

分類Dev

3つのテーブルを結合する必要があります。DateTimeフィールドで注文し、1で制限する必要があります

分類Dev

トリガー、制約を使用してテーブル構造を確認する必要があります

分類Dev

コンテナの幅は、テーブルの幅に基づいて動的である必要があります

分類Dev

ビューを実装する前に、いつビュー != null を確認する必要がありますか?

分類Dev

SQLの別の列値に基づいて、テーブルの同じ列のセル値を比較する必要があります

分類Dev

mysqlで2つのテーブルを結合する方法ですが、2つのテーブルの間に日付の違いがありますか?

分類Dev

テーブル内のテキストを確認する必要があります(Python、Selenium)

分類Dev

オブジェクトの2つの配列であり、一方を他方に基づいてソートする必要があります

分類Dev

UIViewControllerの同じサブクラスであるかどうかを確認するために比較する必要がある2つのUIViewControllerがあります

Related 関連記事

  1. 1

    いくつかの条件に基づいて、結合テーブルを変更する必要があります

  2. 2

    テーブルセル(クリック不可)のIDを見つけ、それに基づいて別の行を確認する必要があります

  3. 3

    SQL-行が別のテーブルと持つ関係の数に基づいて、テーブルの値を更新する必要があります

  4. 4

    日付間の日数(日付が重複していないか条件を確認する必要があります)

  5. 5

    Excel:1つの列の2つの列(日付の間)の日付範囲に基づいて合計する必要があります

  6. 6

    Oracle Sql-2つのテーブルがあり、table2の結果でtable1をフィルタリングする必要があります。table2が空の場合、table1のすべてを返す必要があります

  7. 7

    オブジェクトの2つの配列は、他のキーに基づいて1つをフィルタリングする必要があります

  8. 8

    「2つの」ステップに基づいてテーブルからレコードを削除する必要があります

  9. 9

    2つのテーブルを結合します(1つは連結する必要があります)

  10. 10

    2つのテーブルを結合します(1つは連結する必要があります)

  11. 11

    変数がnullかどうかに基づいて、テーブルからレコードを選択する必要があります。nullの場合、条件と等しくないことを確認します

  12. 12

    1つのキーに基づいて多くの値を格納する必要があります

  13. 13

    夏時間を確認する必要があります

  14. 14

    1に等しい2つの日付の間にダミー変数を作成する必要があります

  15. 15

    最高時刻の特定の日付について、あるテーブルから別のテーブルに1行のデータだけをINSERTするために、どのSQL WHERE条件を使用する必要がありますか?

  16. 16

    PropTypesを追加する場合、typeofを確認する必要がありますか?

  17. 17

    1つのwhere条件に基づいてすべての行を除外する必要があります

  18. 18

    列の値に基づいて日付が異なる2つのテーブルを結合しますか?

  19. 19

    terraformリソースは、変数に基づいて複数のCloudWatchアラームを作成する必要があります。これはプランで確認されていますが、1つのアラームのみをデプロイします。

  20. 20

    現在の日付に基づいて重複を選択する必要があります

  21. 21

    3つのテーブルを結合する必要があります。DateTimeフィールドで注文し、1で制限する必要があります

  22. 22

    トリガー、制約を使用してテーブル構造を確認する必要があります

  23. 23

    コンテナの幅は、テーブルの幅に基づいて動的である必要があります

  24. 24

    ビューを実装する前に、いつビュー != null を確認する必要がありますか?

  25. 25

    SQLの別の列値に基づいて、テーブルの同じ列のセル値を比較する必要があります

  26. 26

    mysqlで2つのテーブルを結合する方法ですが、2つのテーブルの間に日付の違いがありますか?

  27. 27

    テーブル内のテキストを確認する必要があります(Python、Selenium)

  28. 28

    オブジェクトの2つの配列であり、一方を他方に基づいてソートする必要があります

  29. 29

    UIViewControllerの同じサブクラスであるかどうかを確認するために比較する必要がある2つのUIViewControllerがあります

ホットタグ

アーカイブ