2014-12-19 3 views
0

У меня есть три таблицы из трех разных баз данных. Мне нужно получить несколько столбцов из этих трех таблиц, что я сделал, используя внутреннее соединение. Теперь мне нужно получить только ту строку, которая недавно обновлена, т. Е. Последняя строка. Как получить последнюю строку вместе с несколькими столбцами из разных баз данных?Запрос Sql для выбора последней строки вместе с другими столбцами, которые извлекаются с использованием внутреннего соединения

My SQL запрос

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 '' 
+1

Имейте столбец с именем 'modified_date' с' default getdate() 'и используйте' order by modified desc' –

ответ

2

Вы можете использовать TOP 1 с 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 
0

Если вы не можете использовать TOP1 и logtime, по заказу DESC, как другой пост предлагает, вы можете попробовать это ...

Он получает весь набор результатов в таблицу temp с столбцом идентификации, а затем выбирает максимальное значение из этой таблицы.

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) 

Но, на мой взгляд, ТОП-1 ЗАКАЗ ОТ DESC, подход - это путь.