0
WITH A AS (
SELECT SYSDATE date_1,'1' data_1 ,1 item FROM DUAL
UNION
SELECT add_months(SYSDATE,7) date_1,'8'data, '1' item_ FROM DUAL
UNION
SELECT add_months(SYSDATE,6)+ 10, '4' data, '1' item FROM dual
UNION
SELECT add_months(SYSDATE,6) date_1,'3' data, '2' item FROM DUAL
)
SELECT min(date_1), data,item
FROM a 
WHERE date_1 BETWEEN add_months(SYSDATE,6) AND last_day(add_months(SYSDATE,7))
GROUP BY item,data

結果は、アイテム1に2行あることを示していますが、最小日付のみが必要です。コードを変更して、最小(日付)に1つのアイテムの1つのデータを表示する方法. *そして、日付が正しいデータとアイテムと一致する必要があります *。読んでくれてありがとう。正しい答えを楽しみにしています。

私が言いたいことを呼び出すのに良くない方法を見つけました: アイテムごとにグループ化し、スコープ内の最小 date_1 を選択します

WITH A AS (
      SELECT SYSDATE date_1,               '1' data, '1' item FROM DUAL
UNION SELECT add_months(SYSDATE,7) date_1, '8' data, '1' item FROM DUAL
UNION SELECT add_months(SYSDATE,6)+ 10,    '4' data, '1' item FROM dual
UNION SELECT add_months(SYSDATE,6) date_1, '3' data, '2' item FROM DUAL
)   
select a.* from A a,(select min(date_1) date_1,item  from A
where 
date_1 BETWEEN add_months(SYSDATE, 6) 
                 AND last_day(add_months(SYSDATE, 7))
                 group by item) b where a.date_1 = b.date_1 and a.item= b.item
4

1 に答える 1

3

使用KEEP ... FIRST

SQL> WITH A AS (
  2        SELECT SYSDATE date_1,               '1' data, '1' item FROM DUAL
  3  UNION SELECT add_months(SYSDATE,7) date_1, '8' data, '1' item FROM DUAL
  4  UNION SELECT add_months(SYSDATE,6)+ 10,    '4' data, '1' item FROM dual
  5  UNION SELECT add_months(SYSDATE,6) date_1, '3' data, '2' item FROM DUAL
  6  )
  7  SELECT MIN(date_1), item,
  8         MAX(data) KEEP (DENSE_RANK FIRST ORDER BY date_1) DATA
  9    FROM a
 10   WHERE date_1 BETWEEN add_months(SYSDATE, 6)
 11                    AND last_day(add_months(SYSDATE, 7))
 12   GROUP BY item;

MIN(DATE_1) ITEM DATA
----------- ---- ----
01/06/2013  1    4
22/05/2013  2    3

これにより、日付が最も低い行のサブセット(ここでは1行のみ)の(MAX)データが選択されます。

于 2012-11-22T10:34:30.627 に答える