0

次の表があります。

create table weights (
   ident int references users,
   dateW date,
   weight float,
   primary key(ident,dateW)
);

最新の日付を持つ特定のユーザー (ident) から体重のみを選択したい。私は持っている:

SELECT WEIGHT
FROM WEIGHTS
WHERE WEIGHTS.IDENT = 22 AND WEIGHTS.DATEW = (SELECT MAX(WEIGHTS.DATEW)
                                              FROM WEIGHTS);

しかし、それは私が望むことをしていません。提案?

4

3 に答える 3

2

サブクエリを使用できます。

SELECT w.WEIGHT
FROM WEIGHTS w
INNER JOIN
(
    SELECT MAX(DATEW) MaxDATEW
    FROM WEIGHTS 
) w1
    on w.DATEW= w1.MaxDATEW
WHERE w.IDENT = 22 

または、お申し込みいただけますrow_number()

select *
from
(
    SELECT w.WEIGHT, row_number() over(order by w.DATEWdesc) rn
    FROM WEIGHTS w
    WHERE w.IDENT = 22 
) s
where rn = 1
于 2013-01-30T22:09:02.260 に答える
1

クエリで発生する可能性のある問題は、最大日付が別のユーザーから取得される可能性があることです。その場合、結果は得られません。サブクエリは、同じユーザーの最大日付のみを取得する必要があります。

SELECT WEIGHT
FROM WEIGHTS
WHERE WEIGHTS.IDENT = 22 
AND WEIGHTS.DATEW = (
    SELECT MAX(WEIGHTS.DATEW)
    FROM WEIGHTS
    WHERE WEIGHTS.IDENT = 22
);
于 2013-01-30T22:12:22.367 に答える
0
SELECT 
  max(WEIGHT) keep (dense_rank first order by datew desc) as latest_weight
FROM WEIGHTS
WHERE WEIGHTS.IDENT = 22;
于 2013-01-30T22:28:55.803 に答える