很抱歉这有些重复,但我已经通过其他答案帮助我进入下面的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)。每项资产都经过多次测试。
单独运行子查询会返回每个资产的最新测试日期。
我正试图获得每项资产的最新测试。
由于
答案 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;