0

レコードが同じ ID を持たないように、日付で並べ替えられた上位 3 つのレコードを選択したいのですが、同じ ID の 2 つ (またはそれ以上) のレコードについては、最新のものを選択します。テーブルは次のようになります。

ID  | Date                 | Value
1   | 2013-04-29T16:27:20  | value1
2   | 2013-04-29T19:46:25  | value2
2   | 2013-04-30T16:50:30  | value3
3   | 2013-04-30T16:40:30  | value4
1   | 2013-04-30T17:50:30  | value5

結果を次のようにしたい:

ID  | Date                 | Value
1   | 2013-04-30T17:50:30  | value5
2   | 2013-04-30T16:50:30  | value3
3   | 2013-04-30T16:40:30  | value4
4

2 に答える 2

0
SELECT t.ID, t.Date, t.Value
FROM (
    SELECT ID, Date, Value, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) AS RowNumber
    FROM table_name
) t
WHERE t.RowNumber = 1
于 2013-07-16T04:22:05.527 に答える
0

SQL Server 2005+ を使用しているため、実装row_number()して結果を取得できます。

select id, date, value
from 
(
  select id, date, value,
    row_number() over(partition by id order by date desc) seq
  from yourtable
) d
where seq = 1;

SQL Fiddle with Demoを参照してください。

idまたは、集計関数でサブクエリを使用して、最新の日付を返すことができます。

select t1.id, t1.date, t1.value
from yourtable t1
inner join
(
  select id, max(date) date
  from yourtable
  group by id
) t2
  on t1.id = t2.id
  and t1.date = t2.date

デモで SQL Fiddle を参照してください

于 2013-07-16T04:22:54.600 に答える