IDごとに2つ以上の日付がある場合、平均日数を計算する必要があります。date1とdate2の間、date2とdate3の間などです。出力は、IDごとの各間隔の間の平均日数である必要があります。IDごとに各日付を繰り返し処理し、日数を平均化するソリューションを探しています
IDで行番号とパーティションを作成することもできますが、実際のデータでは、IDごとに最大20行になる可能性があります。
CREATE TABLE #ATABLE(
ID INTEGER NOT NULL
,DATE DATE NOT NULL
);
INSERT INTO #ATABLE(ID,DATE) VALUES (1,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/10/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/20/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/30/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (3,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (3,'1/10/2019');
--get avg days between orders
DROP TABLE #ATABLE
上記の出力は次のようになります。
ID AvgDatediff
1 Null
2 10
3 9
を使用lag
して前の行(行ごと)を取得し、それと現在の行との差を見つけることができます。次に、それらを平均化できます。
SELECT id, AVG(diff)
FROM (SELECT id,
DATEDIFF(DAY, date, LAG(date) OVER (PARTITION BY id
ORDER BY date DESC)) AS diff
FROM #atable) t
GROUP BY id;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加