如何在带有 where 子句的 sql 查询中获取最新的日期时间记录?
How to get the latest date time record in an sql query with a where clause?
我有两个表:RO_LAMEL_DATA
和 RO_MAIN_TABLE
。 RO_MAIN_TABLE
包含具有记录密钥 (record_key
) 的作品的所有序列号 (serial_nr
)。 RO_LAMEL_DATA
每个记录键都有几条记录(在同一天),例如机器状态 (machine_status
) 和日期时间值 (pr_date_time
)。我想获得一个产品的最新机器状态。为此,我这样做:
select a.machine_status
from ro_lamel_Data a inner join (
select record_key, max(pr_date_time) as MaxDate
from ro_lamel_Data
group by record_key
) ro_main_table on (a.record_key = ro_main_table.record_key) and a.pr_date_time = MaxDate
where a.record_key =(
select record_key from ro_main_table where serial_nr = 'Y39489');
但是我得到错误:
single-row subquery returns more than one row
我该如何解决这个问题?提前致谢!
也许你需要这样的东西
WITH cte AS ( SELECT machine_status,
record_key,
ROW_NUMBER() OVER (PARTITION BY record_key
ORDER BY pr_date_time DESC) rn
FROM ro_lamel_Data )
SELECT cte.record_key, cte.machine_status last_status
FROM cte
JOIN ro_main_table ON cte.record_key = ro_main_table.record_key
WHERE rn = 1
如果你想要一行,使用 order by
和 fetch first
:
select ld.machine_status
from ro_lamel_Data ld join
ro_main_table mt
using (record_key)
where mt.serial_nr = 'Y39489'
order by ld.pr_ate_time desc
fetch first 1 row only;
我有两个表:RO_LAMEL_DATA
和 RO_MAIN_TABLE
。 RO_MAIN_TABLE
包含具有记录密钥 (record_key
) 的作品的所有序列号 (serial_nr
)。 RO_LAMEL_DATA
每个记录键都有几条记录(在同一天),例如机器状态 (machine_status
) 和日期时间值 (pr_date_time
)。我想获得一个产品的最新机器状态。为此,我这样做:
select a.machine_status
from ro_lamel_Data a inner join (
select record_key, max(pr_date_time) as MaxDate
from ro_lamel_Data
group by record_key
) ro_main_table on (a.record_key = ro_main_table.record_key) and a.pr_date_time = MaxDate
where a.record_key =(
select record_key from ro_main_table where serial_nr = 'Y39489');
但是我得到错误:
single-row subquery returns more than one row
我该如何解决这个问题?提前致谢!
也许你需要这样的东西
WITH cte AS ( SELECT machine_status,
record_key,
ROW_NUMBER() OVER (PARTITION BY record_key
ORDER BY pr_date_time DESC) rn
FROM ro_lamel_Data )
SELECT cte.record_key, cte.machine_status last_status
FROM cte
JOIN ro_main_table ON cte.record_key = ro_main_table.record_key
WHERE rn = 1
如果你想要一行,使用 order by
和 fetch first
:
select ld.machine_status
from ro_lamel_Data ld join
ro_main_table mt
using (record_key)
where mt.serial_nr = 'Y39489'
order by ld.pr_ate_time desc
fetch first 1 row only;