2014-02-11 36 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))' 没有语法错误