按日期对行进行分组,并在结果集中对count和枚举行进行枚举

时间:2013-05-30 04:17:45

标签: sql sql-server sql-server-2008

我在表格,列ID和列日期

中有数据
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 个答案:

答案 0 :(得分: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 演示

更新在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 演示

答案 1 :(得分:0)

试试这个......

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

答案 2 :(得分: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

答案 3 :(得分:0)

仅在一个查询中尝试使用完整输出的这一个..

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

OutPut &gt;&gt;&gt;

------------------------------------
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
------------------------------------