2014-02-11 35 views
2

我有以下工作查詢: http://sqlfiddle.com/#!6/6e124/12SQL:有什麼不對的SQL查詢

SELECT date, time, custom_id, Number 
FROM traffic t 
WHERE CONCAT(date, ' ', time) BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00' 
AND Number = 
(SELECT MAX(CAST(Number as smallint)) FROM traffic WHERE t.date = date and t.custom_id = custom_id) 
ORDER BY date, CAST(Number as smallint) DESC, custom_id 

,但我需要我改成了這樣:

SELECT [Trunk group], 
     Start_Date, Start_Time, 
     [Inc Seizure Traffic (TG)(Erl)] 
FROM [tbl_TG_Nte-Pac_pHrs] t 
WHERE CONCAT(Start_Date, ' ', Start_Time) BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00' 
AND [Inc Seizure Traffic (TG)(Erl)] = 
     (
      SELECT MAX(CAST([Inc Seizure Traffic (TG)(Erl)] as smallint)) 
      FROM [tbl_TG_Nte-Pac_pHrs] 
      WHERE t.Start_Date = Start_Date 
      and t.[Trunk group] = [Trunk group]) 
ORDER BY Start_Date, 
     CAST([Inc Seizure Traffic (TG)(Erl)] as smallint) DESC, 
     [Trunk group] 

的Microsoft Access是給我一個由於某種原因,此行出現語法錯誤:

(SELECT MAX(CAST([Inc Seizure Traffic (TG)(Erl)] as smallint)) FROM [tbl_TG_Nte-Pac_pHrs] WHERE t.Start_Date = Start_Date and t.[Trunk group] = [Trunk group]) 

什麼可能是錯誤的?

+2

SQL小提琴用於SQL Server,但您評論說Access正在給您一個問題。你想在哪個平臺上運行SQL? – Dan

+0

Microsoft Access – user3288852

+0

您更改爲第二個查詢的原始查詢不共享相同的字段。事實上,[Inc Inc Seizure Traffic(TG)(Erl)]來自哪裏?這真的是一個字段名稱嗎? – Linger

回答

3

有2個問題與在WHERE條款的第一個條件:

CONCAT(Start_Date, ' ', Start_Time) BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00' 

的第一個問題是訪問SQL不承認CONCAT()功能可以使用&連接符代替

Start_Date & ' ' & Start_Time 

第二個問題是BETWEEN比較正在將日期評估爲字符串。而這種情況是真實的:

'01/07/1999' BETWEEN '01/06/2014 00:00' AND '01/10/2014 23:00' 

如果要比較這些字符串日期,你可以做這樣的事情:

CDate(Start_Date, ' ', Start_Time) BETWEEN #01/06/2014# AND #01/10/2014 23:00# 

由於CAST()也不會在訪問SQL支持,subtitute CInt()作爲@ mvaraujo建議。其他可能性是Val()CLng()

+1

嗨@HansUP非常感謝。我仍然在處理'CInt([Inc Inc Seizure Traffic(TG)(Erl)]',但這是因爲我沒有刪除_as smallint_代碼。但它現在已經完全正常工作了,再次謝謝! :-) – user3288852

+0

我的解決方案被引用。但是,我是在列名上指責括號,而真正的問題是使用不支持的函數。 –

1

肯定是因爲列名中的括號(即'(TG)')。

我做了一些測試,併爲您的實際需求,你可以使用 'SELECT MAX(CINT([公司扣押交通(TG)(ERL))' 沒有語法錯誤