简体   繁体   中英

Sql query to select last row along with other columns which are retrieved using inner join

I have three tables from three different databases. I have to retrieve multiple columns from these three tables, which I did by using inner join. Now I have to retrieve only that row that is recently updated ie the last row. How do I retrieve the last row along with multiple columns from different databases?

My sql query is

SELECT a.logtime, a.BL1_data_SS_ST, a.BL2_data_SS_ST, a.BL3_data_SS_ST, 
a.BL4_data_SS_ST, a.BL5_data_SS_ST, a.BL6_data_SS_ST, a.BL7_data_SS_ST, 
a.BL8_data_SS_ST, a.BL9_data_SS_ST, a.BL10_data_SS_ST, a.BL11_data_SS_ST,
a.BL12_data_SS_ST, a.BL13_data_SS_ST, a.BL14_data_SS_ST, a.BL15_data_SS_ST, 
a.BL16_data_SS_ST, a.BL17_data_SS_ST, a.BL18_data_SS_ST, a.BL19_data_SS_ST, 
a.BL20_data_SS_ST, a.BL21_data_SS_ST, a.BL22_data_SS_ST, a.BL23_data_SS_ST, 
a.BL24_data_SS_ST, a.BL25_data_SS_ST, a.BL26_data_SS_ST, a.BL27_data_SS_ST,
b.st1_prmt_status_p45, c.beam_current, c.beam_energy

FROM INDUS2_BLFE.dbo.main_BLFE_status a 
INNER JOIN INDUS2_MSIS.dbo.main_MSIS_status b on a.logtime = b.logtime 
INNER JOIN INDUS2_BDS.dbo.DCCT c on b.logtime = c.logtime ''

You can use TOP 1 with ORDER BY

SELECT TOP 1 a.logtime, a.BL1_data_SS_ST, a.BL2_data_SS_ST, a.BL3_data_SS_ST, 
a.BL4_data_SS_ST, a.BL5_data_SS_ST, a.BL6_data_SS_ST, a.BL7_data_SS_ST, 
a.BL8_data_SS_ST, a.BL9_data_SS_ST, a.BL10_data_SS_ST, a.BL11_data_SS_ST,
a.BL12_data_SS_ST, a.BL13_data_SS_ST, a.BL14_data_SS_ST, a.BL15_data_SS_ST,
a.BL16_data_SS_ST, a.BL17_data_SS_ST, a.BL18_data_SS_ST, a.BL19_data_SS_ST,
a.BL20_data_SS_ST, a.BL21_data_SS_ST, a.BL22_data_SS_ST, a.BL23_data_SS_ST, 
a.BL24_data_SS_ST, a.BL25_data_SS_ST, a.BL26_data_SS_ST, a.BL27_data_SS_ST,
b.st1_prmt_status_p45,c.beam_current, c.beam_energy
FROM INDUS2_BLFE.dbo.main_BLFE_status a 
INNER JOIN INDUS2_MSIS.dbo.main_MSIS_status b on a.logtime = b.logtime 
INNER JOIN INDUS2_BDS.dbo.DCCT c on b.logtime = c.logtime ''
ORDER BY a.logtime DESC

If you can't use TOP1, and logtime, to order by DESC, like the other post suggests, You can try this...

It gets the entire result set into a temp table with an identity column, and then selects the max identity from that table.

SELECT IDENTITY(INT, 1, 1) Cnt, *
INTO #TMP 
SELECT a.logtime, a.BL1_data_SS_ST, a.BL2_data_SS_ST, a.BL3_data_SS_ST, 
a.BL4_data_SS_ST, a.BL5_data_SS_ST, a.BL6_data_SS_ST, a.BL7_data_SS_ST, 
a.BL8_data_SS_ST, a.BL9_data_SS_ST, a.BL10_data_SS_ST, a.BL11_data_SS_ST,
a.BL12_data_SS_ST, a.BL13_data_SS_ST, a.BL14_data_SS_ST, a.BL15_data_SS_ST,
a.BL16_data_SS_ST, a.BL17_data_SS_ST, a.BL18_data_SS_ST, a.BL19_data_SS_ST,
a.BL20_data_SS_ST, a.BL21_data_SS_ST, a.BL22_data_SS_ST, a.BL23_data_SS_ST,
a.BL24_data_SS_ST, a.BL25_data_SS_ST, a.BL26_data_SS_ST, a.BL27_data_SS_ST,
b.st1_prmt_status_p45, c.beam_current, c.beam_energy

FROM  INDUS2_BLFE.dbo.main_BLFE_status a 
INNER JOIN INDUS2_MSIS.dbo.main_MSIS_status b on a.logtime = b.logtime 
INNER JOIN INDUS2_BDS.dbo.DCCT c on b.logtime = c.logtime ''

SELECT *
FROM #TMP
WHERE Cnt = (SELECT MAX(Cnt) FROM #TMP)

But in my opinion, the TOP 1 ORDER BY DESC, approach is the way to go.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM