mysql查询基于前一行的值

标签 mysql

我想运行一个 mysql 查询,其中结果基于感兴趣单元格正上方的单元格的值。例如:我正在计算在一系列行为中花费的时间,并想找出步行时间长于步行前进食时间的实例。这是一个示例数据集:

ID   Duration (min)  Time of Day    Behavior
1    21               9:01            Walk
1    31               9:22            Eat
1    15               9:53            Walk
1    21               10:14           Eat
2    7                1:00            Walk
2    9                1:07            Eat
2    4                1:16            Walk

我希望我的查询能够识别“持续时间”数量小于前一行的两行。 IE:ID1的第三个入口,ID2的第三个入口。

如有任何帮助,我们将不胜感激。 谢谢

最佳答案

示例数据:

CREATE TABLE t
    (pkai int auto_increment primary key, `ID` int, `Duration` int, `TOD` time, `Behavior` varchar(4))
;

INSERT INTO t
    (`ID`, `Duration`, `TOD`, `Behavior`)
VALUES
    (1, 21, '9:01', 'Walk'),
    (1, 31, '9:22', 'Eat'),
    (1, 15, '9:53', 'Walk'),
    (1, 21, '10:14', 'Eat'),
    (2, 7, '01:00', 'Walk'),
    (2, 9, '01:07', 'Eat'),
    (2, 4, '01:16', 'Walk')
;

请注意,我添加了另一列用作主键(auto_increment)。它使这里的事情变得不那么复杂,无论如何你都应该有一个主键。

查询:

select ID, Duration, TOD, Behavior from (
    select
    t.*,
    if(@prev_duration > Duration and @prev_id = ID, 1, 0) as prev_entry_longer,
    @prev_duration := if(@prev_id != ID, null, Duration),
    @prev_id := ID
    from
    t
    , (select @prev_duration := Duration, @prev_id := ID from t order by pkai limit 1) var_init
    where pkai != (select min(pkai) from t)
    order by ID, TOD
) sq
where prev_entry_longer = 1;

结果:

| ID | DURATION |                            TOD | BEHAVIOR |
|----|----------|--------------------------------|----------|
|  1 |       15 | January, 01 1970 09:53:00+0000 |     Walk |
|  2 |        4 | January, 01 1970 01:16:00+0000 |     Walk |
  • 阅读更多关于用户定义变量的信息 here .

关于mysql查询基于前一行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987452/

相关文章:

mysql - SQL从表头表中选择,其中明细表行有多个值

mysql - 获取 SQL 中行的值或空条目

php - MySQL 转义行中断导出为 CSV?

c# - 如何将连接sql查询表结果传递给另一个方法?

mysql - 如何根据一个 View 中的某些值从父表中获取所有记录并从子表中获取特定记录

mysql - 如何查询表中最新的记录

php - 在 MySQL 中定义自增前缀

javascript - Node.js mysql 结果到数组

php - Laravel 关系问题

c# - 从分离的类到 winform 显示带有 DataSet 的数据库项目到 Datagridview