如何获取列值小于mysql中先前日期的记录

时间:2016-11-02 11:24:35

标签: mysql

我有一张类似

的表格
id| value     |date
1 | 11        |2016-10-01 01:00:00
2 | 12        |2016-10-02 01:00:00
3 | 13        |2016-10-03 01:00:00
4 | 2         |2016-10-04 01:00:00
5 | 1         |2016-10-05 01:00:00
6 | 14        |2016-10-06 01:00:00

这里我需要像这样检索输出

id| value     |date
4 | 2         |2016-10-04 01:00:00
5 | 1         |2016-10-05 01:00:00

其价值低于之前的日期' 2016-10-03 01:00:00'

2 个答案:

答案 0 :(得分:0)

您可以使用子查询like this

执行此操作
/*create the table*/
CREATE TABLE datas(
    ID INT(11) PRIMARY KEY,
    vals INT(11) NULL,
    dates DATETIME NULL
);
/*insert the datas*/
INSERT INTO datas VALUES(1,'11','2016-10-01 01:00:00');
INSERT INTO datas VALUES(2,'12','2016-10-02 01:00:00');
INSERT INTO datas VALUES(3,'13','2016-10-03 01:00:00');
INSERT INTO datas VALUES(4,'2','2016-10-04 01:00:00');
INSERT INTO datas VALUES(5, '1','2016-10-05 01:00:00');
INSERT INTO datas VALUES(6,'14','2016-10-06 01:00:00');
/*the query*/
SELECT results.* FROM datas AS results
WHERE
results.`vals` < ( 
    SELECT prevs.`vals` 
    FROM datas AS prevs 
    WHERE prevs.`dates` < results.`dates` 
    ORDER BY prevs.`dates` DESC 
    LIMIT 1
    )

答案 1 :(得分:0)

其他几种可能的解决方案(使用@Aroniaina声明的表格)。

首先,使用用户变量获取订单上的所有记录,并将前一行的值继续进行比较

SELECT id, vals, dates 
FROM
(
    SELECT sub1.*,
            @prev_val AS prev_val,
            @prev_val:=vals
    FROM
    (SELECT @prev_val:=0) sub0
    CROSS JOIN
    (
        SELECT id, vals, dates 
        FROM datas
        ORDER BY dates 
    ) sub1
) sub2
WHERE prev_val > vals

或者在JOIN中,日期较小,并使用GROUP_CONCAT / SUBSTRING_INDEX获取最新的先前值,因此可以在HAVING子句中进行比较。

SELECT a.*
FROM datas a
INNER JOIN datas b
ON a.dates > b.dates
GROUP BY a.id, a.vals, a.dates 
HAVING a.vals < SUBSTRING_INDEX(GROUP_CONCAT(b.vals ORDER BY b.dates DESC), ',', 1)