1

私は2つの列の間の日付の違いを取得しようとしており、最終的には請負業者フィールドでグループ化された平均日を取得しようとしています. ほとんどの SQL をダウンさせることができましたが、複数の if シナリオで日付の違いを取得する方法がわかりません。

基本的に、元の日付列が null で、新しい日付列がそうでない場合、新しい日付と注文された日付の日付差を取得します。逆に。元の日付と新しい日付の両方が null の場合は、日付の差分を null に設定します。グループ化された平均日数を考慮しないと、次のようになります。

ここに画像の説明を入力

以下の SQL (avg 関数はまだ含まれていません):

SELECT PT1.CONTRACTOR AS 'Contractor', PT1.date_order AS "date ordered", PT1.DATE_COMPLETED AS "original date", PT2.DATE_COMPLETED AS "new date",
  IF(PT1.DATE_COMPLETED = NULL AND PT2.DATE_COMPLETED IS NOT NULL, DATEDIFF(PT2.DATE_COMPLETED, PT1.DATE_ORDER), IF(PT2.DATE_COMPLETED = NULL AND PT1.DATE_COMPLETED IS NOT NULL, DATEDIFF(PT1.DATE_COMPLETED, PT1.DATE_ORDER), NULL)) AS "DATE DIFF"
FROM PTABLE1 PT1
  INNER JOIN PTABLE2 PT2
    ON PT1.ID = PT2.ID
WHERE PT2.STATUS = 'To_do' OR PT2.STATUS = 'Completed'
  AND PT2.COMPLETE = 'Yes'
 -- GROUP BY PT1.CONTRACTOR
4

1 に答える 1

2

COALESCE はあなたの味方です。リスト内の最初の非 null 値を返すか、それらがすべて NULL の場合は NULL を返します。

だからあなたが望むのはおそらく

datediff(coalesce(original_date, new_date), order_date)

両方が null の場合、datediff は null を返します。

于 2013-10-04T18:24:15.727 に答える