3

私はこのテーブルを持っています:

create table #tmp
(
  column1 varchar(3),
  column2 varchar(5),
  column3 datetime,
  column4 int
)

insert into #tmp values ('AAA', 'SKA', '2013-02-01 00:00:00', 10)
insert into #tmp values ('AAA', 'SKA', '2013-01-31 00:00:00', 15)
insert into #tmp values ('AAA', 'SKB', '2013-01-31 00:00:00', 20)
insert into #tmp values ('AAA', 'SKB', '2013-01-15 00:00:00', 5)
insert into #tmp values ('AAA', 'SKC', '2013-02-01 00:00:00', 25)

column3 で並べられた、明確な column2 を持つ行を選択したいと考えています。これは望ましい結果です:

Col1  Col2   Col3                       Col4
AAA   SKB    2013-01-15 00:00:00.000    5
AAA   SKA    2013-01-31 00:00:00.000    15
AAA   SKC    2013-02-01 00:00:00.000    25

どうやってやるの?
MS SQL 2005 および 2008 を使用しています

4

5 に答える 5

4

これを試して

;with cte as 
(
  select *, 
  row_number() over (partition by column1, column2 
             order by column3) rnk
  from #tmp

) select * from cte where rnk = 1
  order by column3;

SQLデモはこちら

于 2013-02-01T16:58:45.887 に答える
0
SELECT t.column1, t.column2, t.column3, t.column4
FROM @tmp t
INNER JOIN (SELECT DISTINCT column2, MIN(column3) [column3] FROM @tmp GROUP BY column2) v
    ON t.column2 = v.column2 AND t.column3 = v.column3
ORDER BY t.column3

これにより、最も古い column3 を持つ一意の column2 が取得され、column3 で並べ替えられた結果でテーブルがフィルター処理されます。

于 2013-02-01T17:01:09.657 に答える
0

これはすべきです

http://sqlfiddle.com/#!3/d3dad/11

select * from
(
select max(column1) as column1, column2 as column2, max(column3) as column3, 
  max(column4) as column4
from #tmp
group by column2
) a
order by column3
于 2013-02-01T16:47:13.910 に答える
0

それはあなたが望むものに依存します。他の列を処理する必要があります。

その正確なデータから、その正確な結果を取得するには:

select column1, column2, min(column3), min(column4)
from #tmp
group by column1, column2

ただし、一般に、column3 の値は column4 の値とは異なるレコードからのものである可能性があり、SQL に記述されているように、同じ column2 の値を持つ複数の column1 の値がある場合、同じ column2 の複数の結果が得られます。 .

于 2013-02-01T16:48:06.020 に答える
0

row_number()は良いと思います(Sql-Demo

select column1, column2, column3, column4 
from (
  select column1, column2, column3, column4, 
         row_number() over (partition by column2 order by column3) rn
  from #tmp ) A
where rn=1
order by column3
于 2013-02-01T17:18:22.797 に答える