我有一张类似
的表格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'
答案 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)