Sql 按返回相同行数的问题分组
我想获取max last_updated_日期的ID/行,但查询返回的行数相同Sql 按返回相同行数的问题分组,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我想获取max last_updated_日期的ID/行,但查询返回的行数相同 id | job_number | last_udated_date 1407;"88212";"2015-12-16 00:00:00+05:30" 77;"48439";"2015-12-16 00:00:00+05:30" 1526;"1484924208";"2017-01-21 00:00:00+05:30" 1527;"1484924208";"2017-01
id | job_number | last_udated_date
1407;"88212";"2015-12-16 00:00:00+05:30"
77;"48439";"2015-12-16 00:00:00+05:30"
1526;"1484924208";"2017-01-21 00:00:00+05:30"
1527;"1484924208";"2017-01-21 00:00:00+05:30"
1528;"1484924208";"2017-01-21 00:00:00+05:30"
1529;"1484924208";"2017-01-22 07:20:42.586+05:30"
查询应该只返回1407、77、1529,但现在它返回所有值
查询:
select id, last_updated_date
from brs.events
where last_updated_date in (select max(last_updated_date)
from brs.events
group by last_updated_date )
您要执行以下操作:
SELECT id,
last_updated_date
FROM brs.events
WHERE last_updated_date =
(SELECT MAX(last_updated_date) FROM brs.events
)
如果您希望根据最新的上次更新日期仅获取一行,则可以使用以下限制:
select id
from brs.events
order by last_update_date desc
limit 1;
更新有关问题的最新更改:
select
id,
last_updated_date
from (
select
t.*,
row_number() over (partition by job_number order by last_updated_date desc) rn
from your_table t
) t where rn = 1;
如果我理解正确,理想的选择是因为它使查询变得非常简单 SELECT DISTINCT ON(表达式[,…])仅保留 给定表达式计算结果相等的每组行
这里,
Distinct on
将计算每个组中的行(job\u number
)如果我只想根据最新的上次更新日期获取这些记录。该表中有1到1529条记录。我想根据最新更新日期获取所有记录,但仅获取一行。获取所有记录,但仅获取一行-没有任何意义。您能澄清一下吗?该表中有1529条记录,但您的查询只返回1条row@sromit你想要它归还什么?1到1528行?请在问题中澄清。表格形式的预期输出会有所帮助。我希望获得所有行,但我不希望在job_number相等的一天内有任何重复记录,基本上,用户可以在不同的时间在一天内创建相同的工号。请澄清为什么这三个工号应该出现在输出中?因为我想获得用户工作过的所有最新工号,所以有3个不同的工号用户在3天内工作过。请在我的答案中查看更新。如果我想获得select*,这将不起作用,因为还有其他列我也需要数据。我根据您的问题编写了此解决方案,您在编写问题时应该非常清楚,以获得更好的答案Thanx@Wingedparter..当然会记住..但现在我希望所有作业编号和最新lpd上的所有行都不同
select distinct on (job_no) id
,job_no
,max(lpd)
from evnts
group by job_no,id