2012-04-11 76 views
-1

我希望得到每天获得结果的选择结果。林计数错误,并具有以下非工作声明:每天分组

SELECT message, time, personid, count(*) 
FROM errorlog 
WHERE time BETWEEN TO_DATE(todays date - 10 days) AND TO_DATE(todays date) AND SUBSTR(message,0,3) = 'ERR' 
GROUP BY DAY(time), personid, message 
ORDER BY 4 

当我运行这个它说“天时”:无效indentifier。

+1

的SQL的味道,你使用? – Chriseyre2000 2012-04-11 09:54:44

+1

你正在使用哪些DBMS?我们可以猜测,但添加标签有多难? – 2012-04-11 10:03:12

回答

1

应该GROUP BY之后列名。

TRY:

SELECT message, DAY(time) dayTime, personid, count(*) 
FROM errorlog 
WHERE time BETWEEN TO_DATE(todays date - 10 days) AND TO_DATE(todays date) AND SUBSTR(message,0,3) = 'ERR' 
GROUP BY dayTime, personid, message 
ORDER BY 4 
0

您的GROUP BY中的任何物品也必须在您的SELECT中。

如果您按当天分组,并且显示time(我怀疑它是日期时间数据类型),并且您在哪一天有2条记录,那么结果集将如何显示这两个不同的时间?它将无法。

下面的查询使用在SELECTGROUP BY意味着的dd/MM/yyyy的格式将被显示在结果集中,你的记录将被这个分组CONVERT(VARCHAR(10), time, 103)

SELECT message, CONVERT(VARCHAR(10), time, 103), personid, count(*) 
FROM errorlog 
WHERE time BETWEEN TO_DATE(todays date - 10 days) AND TO_DATE(todays date) AND SUBSTR(message,0,3) = 'ERR' 
GROUP BY CONVERT(VARCHAR(10), time, 103), personid, message 
ORDER BY 4 
-1

SQL SERVER?

纠正这一点,

SELECT message, DAY(time) AS [DAY], personid, count(*) 
+0

这是不对的。我很确定'DAY()'返回一个整数的月份日期。因此,今天它会返回'11'。因此,无论月份/年份如何,这将按“11”分组。 – Curt 2012-04-11 09:58:31

+0

是的,但这取决于他想要做什么。我同意在这样的查询中完整日期是显而易见的事情。 – devarc 2012-04-11 10:05:14