MySQL获取行中日期的时间段数

标签 mysql

我有一个 MySQL 表,类似于这个例子:

c_id    date    value
66  2015-07-01  1
66  2015-07-02  777
66  2015-08-01  33
66  2015-08-20  200
66  2015-08-21  11
66  2015-09-14  202
66  2015-09-15  204
66  2015-09-16  23
66  2015-09-17  0
66  2015-09-18  231

我需要得到的是日期在行中的周期数。我没有固定的开始或结束日期,可以有任何一个。

例如:2015-07-01 - 2015-07-02 是第一期,2015-08-01 是第二期,2015-08-20 - 2015-08-21 是第三期,2015-09-14 - 2015-09-18 作为第四期。所以在这个例子中有四个句点。

SELECT 
SUM(value) as value_sum,
... as period_count
FROM my_table 
WHERE cid = 66

一整天都想不通。谢谢。

最佳答案

我没有足够的声誉来评论上述答案。

如果您只需要拆分的数量,那么您可以简单地改写您的问题:“有多少个条目有日期 D,这样日期 D - 1 DAY 没有条目?”

在这种情况下,这就是您所需要的:

SELECT 
    COUNT(*) as PeriodCount
FROM
    `periods`
WHERE
    DATE_ADD(`date`, INTERVAL - 1 DAY) NOT IN (SELECT `date` from `periods`);

在您的 PHP 中,只需从第一行选择“PeriodCount”列。

在澄清之前你让我研究了一些疯狂的存储过程方法:P

关于MySQL获取行中日期的时间段数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32588818/

相关文章:

mysql - 为多个 Joomla! 统一 K2 组件的数据源托管在同一服务器上的网站

php - 解析错误 : syntax error, 意外 'mysql_select_db' (T_STRING) - 无法看到我的错误?

javascript - 无法在模态中携带正确的行值

mysql - 在 Now() 之后返回最近的最近字段

php - 如何使用 PHP 在 MySQL 中存储 '€' 符号?

php - 产品服务器上的表怎么会是 "crashed"呢?

Mysql like 和 BOOLEAN MODE (FULLTEXT) 搜索

mySQL一对多查询

mysql - 这个 SQL DELETE FROM 语法有什么问题?

MySQL 版本相关的语法错误