我在sql请求中看到一个奇怪的行为。
我的表点记录:
# Column Type
1 date timestamp
2 uid varchar(30)
3 ssid varchar(40)
4 reason varchar(50)
5 points int(5) No None
声明:
SELECT date, count(date) as anzahl FROM pointLog WHERE uid = 1 order by date desc
返回以下结果
date anzahl
2012-09-01 12:21:16 14
但声明:
SELECT date FROM pointLog WHERE uid = 1 order by date desc
返回
2012-09-02 12:44:08
作为第一个结果。
所以我的问题:为什么我在第一个包含计数的语句中没有收到2012-09-02
作为第一个结果?
非常感谢!
修改 计数为anzahl的atm仅用于验证此示例中有多于0个条目。我知道它应该在程序中进行测试。
但我的主要问题是,我无法解释,为什么我按相同(日期)排序时会得到2个不同的日期。所以唯一的区别是count属性。但这通常不会改变排序?
FINAL * 解决方案
SELECT MAX(date) AS maxdate, COUNT(date) AS anzahl FROM pointLog WHERE uid = 1
答案 0 :(得分:1)
你得到一个结果:日期的计数,以任意日期开头。然后ORDER BY语句对它进行排序,这是一个无操作,因为只有一行输出。
答案 1 :(得分:0)
您的SQL语句中需要GROUP BY,否则COUNT()不会为每个日期提供单独的总计。
答案 2 :(得分:0)
正如@prosfilaes所回答,您的查询未返回确定性结果,date
以任意方式返回。
如果您想要最新的日期和计数,可以使用:
SELECT
MAX(date) AS maxdate,
COUNT(date) AS anzahl
FROM
pointLog
WHERE
uid = 1 ;