2013-05-27 54 views
2

我想在MSSQL SERVER 2005遵循從派生表執行SELECT語句:選擇從派生表的SQL異常

我試圖解決的問題是,有重複的行,但他們在DATE字段不同用秒,但我只需要幾分鐘考慮例如

ID DATE 
1 08:20:00 
1 08:20:01 
2 09:21:00 
5 10:00:00 
5 10:00:01 

我要帶的ID的不同的值,並且按日期,但正如我按日期順序我需要包括日期字段。所以我不能選擇明確的一列。

派生表查詢(作品本身完美的檢索式兩份)

SELECT p.[SICIL] AS ID, h.[ZAMAN_TRH] AS ZAMAN_TRH 
FROM [RF_BIO].[dbo].[PERSONEL] p, [RF_BIO].[dbo].[HAREKETLER] h 
WHERE h.[ZAMAN_TRH] > '2013-05-27T00:00:00.000' AND h.[YON]= 2 AND 
(p.[KARTNO] = h.[KARTNO] OR p.[SICIL]= h.[SICIL]) 
ORDER BY h.[ZAMAN_TRH] DESC 

使用派生表查詢:

SELECT DISTINCT [SICIL] 
FROM (SELECT p.[SICIL] AS SICIL, h.[ZAMAN_TRH] AS ZAMAN_TRH 
FROM [RF_BIO].[dbo]. [PERSONEL] p, [RF_BIO].[dbo].[HAREKETLER] h 
WHERE h.[ZAMAN_TRH] > '2013-05-27T00:00:00.000' AND h.[YON]= 2 AND 
(p.[KARTNO] = h.[KARTNO] OR p.[SICIL]= h.[SICIL]) ORDER BY h.[ZAMAN_TRH] DESC) AS LAST 

這讓我SQL異常在Java中

java.sql.SQLException: 
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372) 
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2893) 
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2335) 
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:638) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1427) 

謝謝你的幫助。

回答

2

使用GROUP BY子句在ORDER聚合函數BY子句

SELECT p.[ID] AS ID 
FROM [RF_BIO].[dbo].[PERSONEL] p, [RF_BIO].[dbo].[HAREKETLER] h 
WHERE h.[DATE] > '2013-05-27T00:00:00.000' AND h.[YON]= 2 
    AND (p.[KART] = h.[KART] OR p.[ID]= h.[ID]) 
GROUP BY p.[ID] 
ORDER BY MAX(h.[DATE]) DESC 

簡單的演示上SQLFiddle

SELECT p.[SICIL] AS SICIL 
FROM [RF_BIO].[dbo].[PERSONEL] p, [RF_BIO].[dbo].[HAREKETLER] h 
WHERE h.[ZAMAN_TRH] > '2013-05-27T00:00:00.000' AND h.[YON]= 2 
    AND (p.[KARTNO] = h.[KARTNO] OR p.[SICIL]= h.[SICIL]) 
GROUP BY p.[SICIL] 
ORDER BY MAX(h.[ZAMAN_TRH]) DESC 

規劃圖

enter image description here

+0

謝謝它像一個魅力。使用派生表的問題是什麼?你有什麼想法嗎? – Eneramo

+1

這是因爲DISTINCT子句在SELECT語句後執行,因此ORDER BY子句未找到列Date。在GROUP BY子句的情況下,引擎創建表達式(流聚合 - >輸出列表:Expr [1004],[ID]),然後對此表達式進行排序 –