Group By 返回相同行数时出现问题
Group By Having issue returning same number of rows
我想获取最大 last_updated_date 的 ID/行,但查询是 return 相同的行数
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"
查询应该 return 只有 1407,77, 1529,但现在 return 查询所有值
查询:
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
)
如果您只想根据最新 last_update_date 获取一行,您可以为此使用 LIMIT:
select id
from brs.events
order by last_update_date desc
limit 1;
UPDATE 以获取问题的最新更改:
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;
如果我理解正确,理想的选择是 DISTINCT ON()
,因为它使查询变得非常简单。
SELECT DISTINCT ON ( expression [, ...] ) keeps only the first row of
each set of rows where the given expressions evaluate to equal
select distinct on (job_no) id
,job_no
,max(lpd)
from evnts
group by job_no,id
此处,Distinct on
将评估每个组中的行(job_number
)
我想获取最大 last_updated_date 的 ID/行,但查询是 return 相同的行数
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"
查询应该 return 只有 1407,77, 1529,但现在 return 查询所有值
查询:
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
)
如果您只想根据最新 last_update_date 获取一行,您可以为此使用 LIMIT:
select id
from brs.events
order by last_update_date desc
limit 1;
UPDATE 以获取问题的最新更改:
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;
如果我理解正确,理想的选择是 DISTINCT ON()
,因为它使查询变得非常简单。
SELECT DISTINCT ON ( expression [, ...] ) keeps only the first row of each set of rows where the given expressions evaluate to equal
select distinct on (job_no) id
,job_no
,max(lpd)
from evnts
group by job_no,id
此处,Distinct on
将评估每个组中的行(job_number
)