2

過去 10 日間の売上データを選択しようとしており、売上がなかった 0 の日付を含めます。

そのために、デュアルとレベルごとの接続を使用して実験していますが、日付が一致しない理由がわかりません。クエリは失敗します。

基本的な作業クエリは次のとおりです。

SELECT 
  current_date - (LEVEL - 1)
  ,(LEVEL - 1)  as result
FROM Dual CONNECT BY Level <= 10
order by result desc

そして結果:

Current_date-(LEVEL-1) RESULT
13-MAR-15   9
14-MAR-15   8
15-MAR-15   7
16-MAR-15   6
17-MAR-15   5
18-MAR-15   4
19-MAR-15   3
20-MAR-15   2
21-MAR-15   1
22-MAR-15   0

これでうまくいくと思いました。必要な日付が得られたので、サブクエリを追加して売上を取得することができました (結合について考えましたが、クエリのレベルで結合する方法が明確ではありませんでした) ):

SELECT 
  current_date - (LEVEL - 1)
  ,(select count(1) from sales where for_date=(current_date - (LEVEL - 1))) as sale_volume
  ,(LEVEL - 1)  as result
FROM Dual CONNECT BY Level <= 10
order by result desc

ただし、売上があることがわかっている日でも、常に0が返されます。

Current_date-(LEVEL-1) SALE_VOLUME RESULT
13-MAR-15   0   9
14-MAR-15   0   8
15-MAR-15   0   7
16-MAR-15   0   6
17-MAR-15   0   5
18-MAR-15   0   4
19-MAR-15   0   3
20-MAR-15   0   2
21-MAR-15   0   1
22-MAR-15   0   0
4

2 に答える 2

1
SELECT 
    count(sales.for_Date) 
FROM 
   (SELECT 
       Trunc(current_date) - (LEVEL - 1) as d
   FROM 
       Dual CONNECT BY Level <= 10) as DateRangeTbl
LEFT JOIN
    sales 
ON
    Sales.for_Date = DateRangeTbl.d
GROUP BY
    DateRangeTbl.d
于 2015-03-22T13:59:12.300 に答える
0

Aheho が提供するソリューションへの追加 - Sales.for_Date 列から時間コンポーネントを削除する必要もあります。そうしないと、ON 句の等価条件が機能しません。これは、trunc() または ON 句で to_char(your-date,date-format) を使用して両方の日付を文字列に変換することで実現できます。両方の方法でデータベースで動作するようになりました。日付形式は、たとえば「DD-MON-YYYY」です。

于 2015-03-23T16:14:17.597 に答える