2012-04-11 52 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