2013-05-30 25 views
-2

我在一個表中,列名和列日組行按日期計,並列舉排在結果

id || date 
1 || 2013-04-18 15:12:32.000 
2 || 2013-04-18 15:13:02.000 
3 || 2013-05-01 19:09:28.000 
4 || 2013-05-01 19:09:46.000 
5 || 2013-05-01 19:10:01.000 
6 || 2013-05-01 19:10:17.000 
7 || 2013-05-02 08:34:54.000 
8 || 2013-05-02 08:35:12.000 
9 || 2013-05-18 15:12:32.000 
10 || 2013-05-18 15:13:02.000 

有一個數據查詢怎麼只顯示一個算一天?或者一個行與數。所以結果是。

|| date     || 
1 || 2013-04-18 15:12:32.000 || 2 
2 || 2013-05-01 19:09:28.000 || 4 
3 || 2013-05-02 08:34:54.000 || 2 
4 || 2013-05-18 15:13:02.000 || 2 

我試着在mysql和它的工作原理,有我的查詢。

SELECT id, GROUP_CONCAT(date) AS date, COUNT(id) AS count 
FROM petak_tetap 
GROUP BY DATE(date) 

但是當我嘗試到SQL Server 2008,此查詢錯誤

這裏是錯誤消息

Msg 195, Level 15, State 10, Line 1 
'GROUP_CONCAT' is not a recognized built-in function name. 

如何解決呢?

+4

有[全部ady **超過200個**問題(和答案!)](http://stackoverflow.com/search?q=sql+server+group_concat)在這個網站上的這個網站....只是選擇一個.. .. –

+0

OP的問題與'GROUP_CONCAT' – peterm

回答

3

首先出現的是在SQL Server中沒有GROUP_CONCAT的功能,但更重要的是,你不要在你的情況需要此功能提供的功能。使用聚合函數MIN()MAX()可以獲得每個組的一個日期時間值。

SELECT ROW_NUMBER() OVER (ORDER BY [date]) No, [date], [count] 
FROM 
(SELECT MIN([date]) 'date', 
     COUNT(*) 'count' 
    FROM petak_tetap 
    GROUP BY CAST([date] AS DATE) 
) t 

輸出:

| NO |       DATE | COUNT | 
--------------------------------------------- 
| 1 | April, 18 2013 15:12:32+0000 |  2 | 
| 2 | May, 01 2013 19:09:28+0000 |  4 | 
| 3 | May, 02 2013 08:34:54+0000 |  2 | 
| 4 | May, 18 2013 15:12:32+0000 |  2 | 

在這裏被SQLFiddle演示

UPDATE SQLite中

SELECT 
(
    SELECT COUNT(*) 
    FROM 
    (SELECT 1 
     FROM petak_tetap 
     WHERE id <= t.id 
     GROUP BY DATE(date) 
    ) q 
) No, date, count 
    FROM 
(
    SELECT id, MIN(date) date, COUNT(*) count 
    FROM petak_tetap 
    GROUP BY DATE(date) 
) t 

這裏是SQLFiddle演示

+0

無關。謝謝。 –

+0

在sqlite中怎麼樣? @peterm –

+0

http://stackoverflow.com/questions/16837958/group-concat-and-how-to-use-row-number-in-sqlite如何解決它? @peterm –

0

嘗試......所有的

SELECT ROW_NUMBER() OVER (ORDER BY DATE) SNo, DATE, COUNT(DATE)AS Count FROM Table 
GROUP BY DATE 
0

試試這個

select p1.date, 
     (select count(p2.date) from petak_tetap p2 where p2.date=p1.date) 
from petak_tetap p1 group by p1.date 
0

試試這個使用完整輸出在只有一個查詢..

SELECT ROW_NUMBER() OVER(Order BY Min(IDate)) srno, Min(IDate) idate, COUNT(*) Cnt 
FROM grpcontact 
GROUP BY CONVERT(Varchar,IDate,101) 

輸出 >>>

------------------------------------ 
srno | idate     | Cnt 
------------------------------------ 
1 | 2013-04-18 15:12:32.000 | 2 
2 | 2013-05-01 19:09:28.000 | 4 
3 | 2013-05-02 08:34:54.000 | 2 
4 | 2013-05-18 15:12:32.000 | 2 
------------------------------------