2017-02-17 27 views
0

私はこの列がActual_Dateです。 2011年2月12日に終了する週に8回の取引が行われました。私は前の週(2月6日月曜日から17日2月12日まで)に行われたトランザクションの数を私に提供するSQLスニペットを作成しようとしています。私は1,2,3などに日を変更しようとしました..とSQLはまだ行われたトランザクションの正しい番号を私に提供していません。スクリプトに数字8を追加するにはどうすればいいですか?与えられた週のトランザクションの数

Actual_Date 
01/31/2017 
01/30/2017 
01/30/2017 
01/30/2017 
02/04/2017 
02/05/2017 
02/06/2017  1 
02/10/2017  2 
02/08/2017  3 
02/06/2017  4 
02/12/2017  5 
02/06/2017  6 
02/06/2017  7 
02/12/2017  8  <------------ Number of Transactions 

マイスクリプト:

select coalesce(count(case when Actual_Date = (date_trunc 
('week',Actual_Date") + '4 days'::interval)::date 
        then Actual_Date 
         end),0) "This Week" 
         from mysqltable 
+0

あなたがハードコーディングすることはできません週の範囲とカウント? –

+0

私はそれをすることができますが、トランザクションがゼロになることもありますし、その都度、日付を変更するのではなく、プロセスを自動化したいと考えています。そして、これは私の拡張SQLスクリプトのマイナーな部分です、私はこの部分を回避するのが難しいです。 –

+1

'tablenameからのselect count(*)ここでactual_date> =日付 '2017-02-06'とactual_date <= date '2017-02-12'' –

答えて

1

あなたは上記提供されたデータを指定して、このような何かを行うことができます。

CREATE TABLE Transactions (
    id INT PRIMARY KEY , 
    actual_date DATE 
); 

INSERT INTO Transactions (id, actual_date) VALUES 
    (1, '2017-01-31'), 
    (2, '2017-01-30'), 
    (3, '2017-01-30'), 
    (4, '2017-01-30'), 
    (5, '2017-02-04'), 
    (6, '2017-02-05'), 
    (7, '2017-02-06'), 
    (8, '2017-02-10'), 
    (9, '2017-02-08'), 
    (10, '2017-02-06'), 
    (11, '2017-02-12'),  
    (12, '2017-02-06'), 
    (13, '2017-02-06'), 
    (14, '2017-02-12'); ` 

PostgreSQLの次のクエリを実行:

SELECT 
    actual_date as "Acutal_Date", 

    extract(week FROM actual_date) as "Week_Number", 

    SUM(
    COUNT(*)) 
    OVER (
    PARTITION BY extract(week FROM actual_date) 
    ORDER BY actual_date 
    ) as "Weekly_Count" 
FROM 
    Transactions 
GROUP BY actual_date 
ORDER BY actual_date; 

あるいは、MySQLを使用している場合、使用:

SELECT 
    actual_date as "Actual_Date", 

    WEEKOFYEAR(actual_date) as "Week_Number", 

    (SELECT 
    COUNT(*) 
    FROM 
    Transactions T 
    WHERE 
    WEEKOFYEAR(T.actual_date) = WEEKOFYEAR(Transactions.actual_date) AND 
    T.actual_date <= Transactions.actual_date) as "Weekly_Count" 
FROM 
    Transactions 
GROUP BY actual_date 
ORDER BY actual_date; 

を演出しますが:

┌─────────────┬─────────────┬──────────────┐ 
│ Acutal_Date │ Week_Number │ Weekly_Count │ 
├─────────────┼─────────────┼──────────────┤ 
│ 2017-01-30 │   5 │   3 │ 
│ 2017-01-31 │   5 │   4 │ 
│ 2017-02-04 │   5 │   5 │ 
│ 2017-02-05 │   5 │   6 │ 
│ 2017-02-06 │   6 │   4 │ 
│ 2017-02-08 │   6 │   5 │ 
│ 2017-02-10 │   6 │   6 │ 
│ 2017-02-12 │   6 │   8 │ 
└─────────────┴─────────────┴──────────────┘ 
関連する問題