这里有一些问题。首先,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(开始)? –
不要忘记接受一个答案,如果它解决了你的问题! :) –