8

これが私のSQLサーバーテーブルです

ID       Date       Value 
___      ____       _____
3241     9/17/12    5
3241     9/16/12    100
3241     9/15/12    20
4355     9/16/12    12
4355     9/15/12    132
4355     9/14/12    4
1234     9/16/12    45
2236     9/15/12    128
2236     9/14/12    323
2002     9/17/12    45

これは簡単にできるように思えますが、なぜ行き詰まっているのかわかりません。各 ID の max(date) とその max(date) の値のみを選択したいと思います。各 ID に関して max(date) ではない他のすべての日付を無視したいと思います。

テーブルを次のように表示したいです。

ID       Date       Value 
___      ____       _____
3241     9/17/12    5
4355     9/16/12    12
1234     9/16/12    45
2236     9/15/12    128
2002     9/17/12    45

max(date) を使用してグループ化を試みましたが、何もグループ化されませんでした。何が間違っているのかわかりません。助けてくれてありがとう!

4

4 に答える 4

17

以下を使用できます。

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

デモを見る

于 2012-09-17T17:58:11.423 に答える
2

これにより、必要なものが得られます。

SELECT 
    m.ID,
    m.Date,
    m.Value
FROM 
    myTable m
    JOIN (SELECT ID, max(Date) as Date FROM myTable GROUP BY ID) as a
    ON m.ID = a.ID and m.Date = a.Date
于 2012-09-17T17:58:37.320 に答える
0

結合ステートメントを回避するためにこれを使用しました

WITH table1 
AS (SELECT
  id,
  Date,
  Value,
  ROW_NUMBER() OVER (PARTITION BY id ORDER BY Date DESC) AS rn
FROM yourtable)
SELECT
  *
FROM table1
WHERE rn = 1
于 2021-06-25T17:20:22.740 に答える
0

SQL 実装を指定していませんが、次のようなものが機能するはずです。

op は、max[imum] 日付の ID 値を取得するためだけに、max() を使用するように特に要求していないことに注意してください。

TSQL:

select top 1 ID, Date, Value from yourtable order by Date DESC;

TSQL ではなく、制限をサポートする必要があります: (テストされていません。)

select ID, Date, Value from yourtable order by Date DESC limit 1,1;
于 2019-03-12T23:36:55.383 に答える