SQL获取最大日期并加入其他表

时间:2015-10-22 14:38:00

标签: sql tsql join subquery max

很抱歉这有些重复,但我已经通过其他答案帮助我进入下面的SQL,但我无法弄清楚如何管理连接与获得最大日期的子查询。

SELECT
mo_number, -- from systems_test_status, everything else from combiner_test_data
CDT.test_index,
CDT.datetime,
lumina_current_1,
power_reading_1,
lumina_current_2,
power_reading_2,
lumina_current_3,
power_reading_3,
lumina_current_4,
power_reading_4
most_recent,
step_pass_status

FROM combiner_test_data AS CDT

INNER JOIN systems_test_status ON CDT.test_index = systems_test_status.test_index

--JOIN(select
--  test_index,
--  MAX(datetime) AS most_recent_time
--  FROM combiner_test_data AS subCDT
--  GROUP BY test_index) as joinCDT on CDT.test_index = joinCDT.test_index
--  and CDT.datetime = joinCDT.most_recent_time

WHERE lumina_current_2 > 12

连接和子查询分别工作正常,但它们只输出几行,而我期望几千行。我在上面的例子中注释掉了子查询。我需要内部联接的唯一原因是通过加入test_index来返回systems_test_status.mo_number。

在没有子查询的情况下正确运行它会返回大约48,000条记录,用于测试电气资产的压力。其中许多记录属于同一资产(其参考资料为test_index)。每项资产都经过多次测试。

单独运行子查询会返回每个资产的最新测试日期。

我正试图获得每项资产的最新测试。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用row_number功能将最大日期行设置为1,然后选择记录。该解决方案假定mo_number唯一标识每个资产。如果没有,请将partition by功能中的row_number更改为唯一标识资产的列。

select * from
(
SELECT
mo_number, 
combiner_test_data
CDT.test_index,
CDT.datetime,
lumina_current_1,
power_reading_1,
lumina_current_2,
power_reading_2,
lumina_current_3,
power_reading_3,
lumina_current_4,
power_reading_4
most_recent,
step_pass_status,
row_number() over(partition by mo_number order by datetime desc) as rn
FROM combiner_test_data AS CDT
INNER JOIN systems_test_status ON CDT.test_index = systems_test_status.test_index
WHERE lumina_current_2 > 12
) t
where rn = 1;