2014-02-11 58 views
0

我有以下MySQL查询:MySQL查询MS 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 SIGNED)) FROM traffic WHERE t.date = date and t.custom_id = custom_id) 
ORDER BY date, CAST(Number as SIGNED) DESC, custom_id 

这是SQLFiddle在MySQL(工作):http://sqlfiddle.com/#!2/6e1248/3

我怎么能转换/翻译成MS SQL? SQLFiddle(不工作):提前http://sqlfiddle.com/#!6/6e124/1

感谢

+0

为什么日期和时间分隔列?除非日期格式适合DATE,否则这在MySQL中也不起作用! – Strawberry

+0

由于日期时间格式,查询可能在MySQL中不起作用。跨越月份边界时,“between”不起作用。 –

+0

http://sqlfiddle.com/#!6/6e124/21 – Mihai

回答

2
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 
+0

完美工作。完全相同的结果,谢谢! – user3288852

+0

感谢你,与SQLFiddle的链接更简单! – bdn02

1

的主要问题是,SQL Server不喜欢"附上的字符串,这些都将得到处理作为列名除去这些(和CAST S)作品:

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(Number) FROM traffic WHERE t.date = date and t.custom_id = custom_id) 
ORDER BY date, Number DESC, custom_id 

编辑:哎呀,只是注意到演员是需要的。以@ bdn02的答案为例。

+0

这就是为什么我没有得到我期待的结果。谢谢! – user3288852