【问题标题】:Getting The Start and End Time MYSQL获取开始和结束时间 MYSQL
【发布时间】:2020-11-09 05:57:08
【问题描述】:

我正在尝试检索可以确定开始和结束日期的数据并查看宠物名的更改间隔

这是我的示例数据。

这是我的预期输出

我试着这样查询

    SELECT 
    `line`, `Petname`, MIN(`start date`), MAX(`end date`)
FROM
    `tablename`
WHERE
    timestamp BETWEEN '2020-07-01 00:00:00' AND NOW() group by petname

但是我的输出是这样返回的

【问题讨论】:

  • 您为什么希望 Petname FKN92BFKN8LD 在您的结果中出现两次?
  • 我想表明宠物名随时间变化。
  • 例如,它在哪里表明 Petname 更改为 FKN92B?您是说不连续的日子表示应该显示新的结果行吗?
  • 例如。从凌晨 1 点到凌晨 2 点,我使用宠物名称 FKN92B,然后在病房后凌晨 2 点到凌晨 3 点,我将宠物名称更改为 FKN8LD,然后凌晨 3 点 - 凌晨 4 点我返回 FKN92B,所以我的时间范围是 FKN92B 开始日期 - 凌晨 1 点结束日期 2 上午 FKN8LD 开始日期 - 凌晨 2 点结束日期 3 点 FKN92B 开始日期 - 凌晨 3 点结束日期凌晨 4 点
  • 宠物名是否更改为FKNAJK 还是完全不同的宠物名?更重要的是:数据库在哪里存储有关给定宠物名称是否表示宠物或现有宠物的不同名称的信息?没有这些信息,您的查询是不可能的。

标签: mysql mysql-workbench workbench


【解决方案1】:

我没有得到你表的创建sql,所以我创建一个只是为了测试。 以下是我的验证表。可能和你的不一样,请根据自己的表格修改。

+----+---------+------------+------------+
| id | petname | start_date | end_date   |
+----+---------+------------+------------+
|  1 | FKN92B  | 2020-07-01 | 2020-07-02 |
|  2 | FKN92B  | 2020-07-02 | 2020-07-04 |
|  3 | FKN8LD  | 2020-07-04 | 2020-07-05 |
|  4 | FKN8LD  | 2020-07-07 | 2020-07-08 |
|  5 | FKN92B  | 2020-07-11 | 2020-07-12 |
|  6 | FKN92B  | 2020-07-12 | 2020-07-14 |
|  7 | FKN8LD  | 2020-07-08 | 2020-07-09 |
|  8 | FKN8LD  | 2020-07-11 | 2020-07-11 |
+----+---------+------------+------------+
8 rows in set (0.00 sec)

SQL如下,如果有任何问题,请试一试,让我知道:

mysql> SET @lastpetname := null;
Query OK, 0 rows affected (0.00 sec)

mysql> SET @groupnum := 0;
Query OK, 0 rows affected (0.00 sec)

mysql> select petname, min(start_date), max(end_date)
    -> from
    ->     (SELECT
    ->             case
    ->                when @lastpetname is null then @groupnum := @groupnum + 1
    ->                when @lastpetname != petname > 0 then @groupnum := @groupnum + 1
    ->                else @groupnum := @groupnum
    ->             end as group_num,
    ->             @lastpetname := petname as petname,
    ->             `start_date`,
    ->            `end_date`
    ->     from `petlog`) t
    -> group by group_num;
+---------+-----------------+---------------+
| petname | min(start_date) | max(end_date) |
+---------+-----------------+---------------+
| FKN92B  | 2020-07-01      | 2020-07-04    |
| FKN8LD  | 2020-07-04      | 2020-07-08    |
| FKN92B  | 2020-07-11      | 2020-07-14    |
| FKN8LD  | 2020-07-08      | 2020-07-11    |
+---------+-----------------+---------------+
4 rows in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2021-09-06
    相关资源
    最近更新 更多