5

以下はテーブルデータ(小さな部分)です。基本的に、アカウント番号でグループ化したときに、original_date_ctrが最小の行だけをクエリしようとしています。

私はHAVING(MIN())を使ってみましたが、ここで= Min()と他の方法で運がありませんでした。

ここでの正しい結果は、id_ctr 688、1204、および1209になります。

id_ctr  account_number_cus  original_date_ctr   mrc_ctr  
------  ------------------  -----------------  ----------
   688               20062  2008-05-17             138.97
  1204              151604  2006-08-10           42000.00
  1209              151609  2006-06-29             968.68
  1367               20062  2011-10-27             207.88
  1434              151609  2009-09-10            1469.62
  1524              151604  2009-09-01           36999.99
  1585              151609  2012-05-31            1683.88
4

2 に答える 2

11

結合を使用してこれを行うと、より高速になります。

SELECT a.*
FROM mytable a
LEFT JOIN mytable b
  ON a.account_number_cus = b.account_number_cus
  AND b.original_date_ctr < a.original_date_ctr
WHERE b.id_ctr IS NULL
于 2012-09-11T21:38:55.487 に答える
4

これは次の方法で実行できます。

select t1.id_ctr,
    t1.account_number_cus,
    t1.original_date_ctr,
    t1.mrc_ctr  
from yourtable t1
inner join
(
    select min(original_date_ctr) as mindate, account_number_cus
    from yourtable
    group by account_number_cus
) t2
    on t1.account_number_cus = t2.account_number_cus
    and t1.original_date_ctr = t2.mindate

SQL FiddlewithDemoを参照してください

于 2012-09-11T21:33:16.673 に答える