今週の注文した顧客の総数を特定します。 どうすればできますか?今週のデータ
select count(*) numberofcustomer from invoice
where invdate=sysdate-7;
これは間違いありませんか?
今週の注文した顧客の総数を特定します。 どうすればできますか?今週のデータ
select count(*) numberofcustomer from invoice
where invdate=sysdate-7;
これは間違いありませんか?
請求書の総数ではなく、 "...総顧客数..."が質問されます。顧客は1週間に複数の注文を行うことができます。あなたのテーブルの顧客を特定するフィールドの名前が何であるかはわかりません。それはCUSTOMER_ID
としましょう。個々の顧客の合計数を取得するには、以下にようCOUNT(DISTINCT CUSTOMER_ID)
を使用する必要があります。
WITH cteCURRENT_WEEK AS (SELECT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') - INTERVAL '7' DAY AS BEGINNING_OF_WEEK,
NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') - INTERVAL '1' SECOND AS END_OF_WEEK
FROM DUAL)
SELECT COUNT(DISTINCT CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS
FROM INVOICE i
CROSS JOIN cteCURRENT_WEEK w
WHERE i.INVDATE BETWEEN w.BEGINNING_OF_WEEK AND w.END_OF_WEEK
これは、「週」は日曜日の最後の第二月曜日からの第一、第二から実行されることを前提としています。あなたのビジネスが異なる週境界を使用する場合は、必要に応じてcteCURRENT_WEEK
を調整する必要があります。
また、質問には、請求書の総数ではなく、注文総数を尋ねます。請求書は、顧客に出荷された内容を示す出荷伝票です。オーダーは、顧客が何を望んでいるかを示す摂取書類です。これらは2つの非常に異なるものであり、特定の週に受注しても同じ週に請求されるわけではありません。 CUSTOMER_ORDERテーブル(または同様のもの)をお持ちの場合は、INVOICEテーブルではなく、注文数を決定するためにおそらく使用しているはずです。
幸運のベスト。
'TRUNC(SYSDATE、 'IW')'は現在のISO週の月曜日に日付を切り捨てます。 => TRUNC> = TRUNC(SYSDATE、 'IW')とinvvate
@ MT0 - すべてのビジネスがISOの週に実行されているわけではありません。たとえば、私が働いている会社では、公式にISO週ルールを遵守していませんが、実際にはほぼ常にそうした方法で動作しますが、EST/EDTの真夜中過ぎに03: 00:00それは、販売日ではなく、前のカレンダー日の合計で計上されるため、販売日は、03:01 AMから03:00 AMまで多かれ少なかれ実行されます。 –
これを試してください:あなたは、現在の週の最初の日を取得するためにTRUNC
を使用することができ
select count(*) numberofcustomer from invoice where invdate>sysdate-7;
。 <
条件が重なりを防止するために使用されていることを
これは、これは(月曜日〜金曜日)現在の平日と比較
where invdate >= TRUNC(SYSDATE,'IW') AND invdate < TRUNC(SYSDATE,'IW') + 7
日曜日、月曜日と比較
where invdate >= TRUNC(SYSDATE,'IW') AND invdate < TRUNC(SYSDATE,'IW') + 5
注意。あなたは12月-25を起動週間比較している場合たとえば、それは範囲を比較する必要があり :25.12.2017 00:00:00 and 29.12.2017 23:59:59
ありがとうございます。それは働いた –
Oracleの翌日関数を参照してください...あなたのケースであなたは7と14を減算する必要がありますfxの結果から
「今週」を定義する必要があります。最後の7日間?または日曜日以来の注文ですか?月曜日から? –