我被一个查询困住了,其中一个表有许多相同id的记录,并且列有不同的值,如下所示:
ID Name Location Daysdue date
001 MINE NBI 120 13-FEB-2013
001 TEST MSA 111 14-FEB-2013
002 MINE NBI 13 13-FEB-2013
002 MINE MSA 104 15-FEB-2013我想返回一个最高日期到期的记录,所以我写了一个查询:
select id,max(daysdue),name,location,date group by id,name,location,date;此查询不是为每个id返回一条记录,而是为每个id返回几条记录,因为我已经与每一列进行了分组,每个列都是不同的。选择基于id的最大天数行的最佳方法是什么,而不管其他列中的其他值如何?
例如,我希望将其返回为:
001 MINE NBI 120 13-FEB-2013
002 MINE MSA 104 15-FEB-2013发布于 2014-03-14 14:38:06
似乎你想要的东西
SELECT *
FROM (SELECT t.*,
rank() over (partition by id
order by daysDue desc) rnk
FROM table_name t)
WHERE rnk = 1根据您希望如何处理领带(具有相同id和相同daysDue的两行),您可能希望使用dense_rank或row_number函数,而不是rank。
发布于 2014-03-14 14:37:40
首先,您需要为每个MAX(daysdue)找到ID
SELECT
ID,
MAX(daysdue) AS max_daysdue
FROM table
GROUP BY ID;然后你就可以加入你原来的桌子了。
SELECT t.*
FROM
table t
JOIN (
SELECT
ID,
MAX(daysdue) AS max_daysdue
FROM table
GROUP BY ID
) m ON
t.ID = m.ID
AND t.daysdue = m.max_daysdue;请注意,在匹配的情况下,您可能有重复的id --我想在语义上是有意义的。
发布于 2014-03-14 14:38:16
SELECT
id,daysdue,name,location,date
FROM your_table
WHERE daysdue = (
SELECT max(daysdue) FROM your_table
);https://stackoverflow.com/questions/22407975
复制相似问题