Група радкоў па даце з падлікам і пералік радкоў у выніковым

У мяне ёсць дадзеныя ў табліцы, Ідэнтыфікатар слупка і слупка даты

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.

як выправіць гэта?

2
Ёсць ўжо <�б> больш за дзвесце пытанні і адказы (!) па гэтай тэме тут, на гэтым сайце .... проста выбраць адзін ....
дададзена аўтар marc_s, крыніца
Ёсць ўжо <�б> больш за дзвесце пытанні і адказы (!) па гэтай тэме тут, на гэтым сайце .... проста выбраць адзін ....
дададзена аўтар marc_s, крыніца
Пытанне OP не мае нічога агульнага з GROUP_CONCAT
дададзена аўтар peterm, крыніца
Пытанне OP не мае нічога агульнага з GROUP_CONCAT
дададзена аўтар peterm, крыніца

8 адказы

Перш за ўсё няма GROUP_CONCAT функцыя ў SQL Server, але што больш важна, што вам не трэба ў вашым выпадку функцыянальнасць гэтая функцыя забяспечвае. Выкарыстоўвайце агрэгатны функцыю 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 In 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 дэма

3
дададзена
гэта працуе. дзякуй.
дададзена аўтар Abox LsrKdz, крыніца
як наконт ў SQLite? @peterm
дададзена аўтар Abox LsrKdz, крыніца
дададзена аўтар Abox LsrKdz, крыніца
да я бачу. дзякуй за дапамогу мне. я думаю, што функцыя ROW_NUMBER() толькі праца ў SQL Server. CMIIW @peterm
дададзена аўтар Abox LsrKdz, крыніца
@Alexbelek Глядзі абноўлены адказ і sqlfiddle.
дададзена аўтар peterm, крыніца
@Alexbelek І адказ на іншае пытанне тут stackoverflow.com/a/16849618/1920232
дададзена аўтар peterm, крыніца

Перш за ўсё няма GROUP_CONCAT функцыя ў SQL Server, але што больш важна, што вам не трэба ў вашым выпадку функцыянальнасць гэтая функцыя забяспечвае. Выкарыстоўвайце агрэгатны функцыю 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 In 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 дэма

3
дададзена
гэта працуе. дзякуй.
дададзена аўтар Abox LsrKdz, крыніца
як наконт ў SQLite? @peterm
дададзена аўтар Abox LsrKdz, крыніца
дададзена аўтар Abox LsrKdz, крыніца
да я бачу. дзякуй за дапамогу мне. я думаю, што функцыя ROW_NUMBER() толькі праца ў SQL Server. CMIIW @peterm
дададзена аўтар Abox LsrKdz, крыніца
@Alexbelek Глядзі абноўлены адказ і sqlfiddle.
дададзена аўтар peterm, крыніца
@Alexbelek І адказ на іншае пытанне тут stackoverflow.com/a/16849618/1920232
дададзена аўтар peterm, крыніца

Паспрабуйце гэта ...

SELECT ROW_NUMBER() OVER (ORDER BY DATE) SNo, DATE, COUNT(DATE)AS Count FROM Table
GROUP BY DATE 
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 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)

OutPut >>>

------------------------------------
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
------------------------------------
0
дададзена

<�Моцны> Паспрабуйце гэта з высновай ў адным запыце толькі ..

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

OutPut >>>

------------------------------------
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
------------------------------------
0
дададзена