group_concat 以及如何在 sqlite 中使用行号

Posted

技术标签:

【中文标题】group_concat 以及如何在 sqlite 中使用行号【英文标题】:group_concat and how to use row number in sqlite 【发布时间】:2013-05-26 03:13:14 【问题描述】:

我有一个表中的数据,列 id 和列日期

id  || datetime
1   || 2013-05-24 19:23:16
2   || 2013-05-28 19:24:20
3   || 2013-05-28 19:25:05  
4   || 2013-05-30 19:25:39  
5   || 2013-05-30 19:26:05  

如何查询只显示一天计数?或一行计数。所以结果是。

    || datetime            || count
1   || 2013-05-24 19:23:16 ||  1
2   || 2013-05-28 19:24:20 ||  2
3   || 2013-05-30 19:25:39 ||  2

我在 mysql 中尝试,它可以工作,这是我的查询。

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

但是当我使用 sqlite 时,结果是给我一个字符串

5 || 2013-05-24 19:23:16,2013-05-28 19:24:20,2013-05-28 19:25:05,2013-05-30 19:25:39,2013-05-30 19:26:05 || 5

如何解决?

帮帮我

编辑

当我使用查询时

SELECT [datetime], [count] FROM (SELECT MAX([datetime]) 'datetime', COUN
T(*) 'count' FROM dataPetak GROUP BY CAST ([datetime] AS DATE)) t;

结果是

       2013-05-24 19:23:16 ||  1
       2013-05-28 19:24:20 ||  2
       2013-05-30 19:25:39 ||  2

如何在 sqlite 中使用行号?

所以结果是

1   || 2013-05-24 19:23:16 ||  1
2   || 2013-05-28 19:24:20 ||  2
3   || 2013-05-30 19:25:39 ||  2

当我尝试这个查询时,

SELECT ROW_NUMBER () OVER (ORDER BY [datetime]) No, [datetime], [count] FROM (SELECT MAX([datetime]) 'datetime', COUN
T(*) 'count' FROM dataPetak GROUP BY CAST ([datetime] AS DATE)) t;

显示错误

Error: near "(": syntax error

如何解决?

【问题讨论】:

您的第一个查询对我有用。 【参考方案1】:

在您的情况下不需要GROUP_CONCAT() 功能。您在问题中的最后一个查询是针对 SQL Server 的。 Sqlite 没有ROW_NUMBER() 的实现。

说到这里,试试

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

输出:

| No |            datetime | count |
------------------------------------
|  1 | 2013-05-24 19:23:16 |     1 |
|  2 | 2013-05-28 19:24:20 |     2 |
|  3 | 2013-05-30 19:25:39 |     2 |

这里是SQLFiddle演示

【讨论】:

@PujaSury 您的问题需要更多帮助吗? 是的,我认为不需要GROUP_CONCAT() 这是我的查询,然后我更新您的答案SELECT _id, date(date) AS date, COUNT(*) 'count' from tbl where idDb=" + rowID + " GROUP BY DATE (date); 现在您的答案完美运行。惊人的。 @peterm【参考方案2】:

试试这个查询

select date(datetime) as date,  count(*) as count from tbl 

group by date(datetime)

FIDDLE

|       date | count |
----------------------
| 2013-05-24 |     1 |
| 2013-05-28 |     2 |
| 2013-05-30 |     2 |

【讨论】:

以上是关于group_concat 以及如何在 sqlite 中使用行号的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite group_concat 选择“特殊需要”

group_concat sqlite 和 order by

在 SQLite 的 GROUP_CONCAT 函数中使用 ORDER BY 子句

Sqlite group_concat 排序

在 SQLite 中,多个列的排序方式是不是与 group_concat 相同?

如何包含两个表中的所有值? group_concat 和其他值