這裏有一些問題。首先,COUNT(*)
的存在會將此變爲一個聚合查詢,您不需要。這可能是你麻煩的原因。其次,如果您的appuntamento
表中有很多行,則此查詢的性能會很差,因爲您無法使用索引。所需的時間和從某一天在你的表中的最後(最新即時)行持續時間以及預約當天的號
假設,你需要這樣做:
SELECT a.start, a.duration, b.count
FROM (
SELECT start,
duration
FROM appuntamento
WHERE start >= DATE('2014-04-08 18:30:00')
AND start < DATE('2014-04-08 18:30:00') + INTERVAL 1 DAY
ORDER BY start DESC, duration DESC
LIMIT 1
) AS a
JOIN (
SELECT COUNT(*) AS count
FROM appuntamento
WHERE start >= DATE('2014-04-08 18:30:00')
AND start < DATE('2014-04-08 18:30:00') + INTERVAL 1 DAY
) AS b
說明:首先,在start
上搜索的這種形式允許您使用start
列中的索引。出於性能原因,您需要這樣做。
WHERE start >= DATE('2014-04-08 18:30:00')
AND start < DATE('2014-04-08 18:30:00') + INTERVAL 1 DAY
其次,您需要將COUNT(*)作爲單獨的子查詢來處理。我已經做到了。
第三,你絕對可以做ORDER BY start DESC
,它會工作,如果start
是一個DATETIME列。不需要UNIX_TIMESTAMP()
。
四,我用ORDER BY start DESC, duration DESC
安排返回最長約會,如果碰巧有幾個與start
時間相同。
您可以使用http://sqlfiddle.com/ –
提供樣本數據集和您的表格定義爲什麼不只是在您的選擇中做MAX(開始)? –
不要忘記接受一個答案,如果它解決了你的問題! :) –