这个问题在这里已有答案:
我有一个数据 table
如下:
id date1 date2 rate
1 01/01/2017 03/01/2017 0.60
1 02/01/2017 03/01/2017 0.40
1 03/01/2017 03/01/2017 0.00
1 04/01/2017 03/01/2017 0.00
1 05/01/2017 03/01/2017 0.00
2 . . .
对于每个id,我想在它变为0之前为 rate
选择最近的正值。因此,由于 date2
的值是 03/01/3017
,因此id 1的速率值在 03/01/3017
上变为0。我想选择费率为 0.40
的行。
我想为多个ID做这个。 date2
也不能成为周末。
我认为这将满足您的要求:
SELECT a.*
FROM data_table a
INNER JOIN
(
SELECT id
, MIN(date1) AS date1
FROM data_table
WHERE rate > 0
GROUP BY id
) b ON a.id = b.id
AND a.date1 = b.date1;
这是一种方法。我把表名称为table1
。
SELECT a.id, a.rate
FROM table1 a
WHERE a.date1 = (SELECT MAX(date1) FROM table1 WHERE a.id = id and rate <> 0)
table1
包括您提供的数据和由id = 2
提供的2行数据。
数据
CREATE TABLE table1 (id INT, date1 DATE, date2 DATE, rate FLOAT);
INSERT table1(id, date1, date2, rate) VALUES
(1,'2017-01-01','2017-03-01',0.60),
(1,'2017-02-01','2017-03-01',0.40),
(1,'2017-03-01','2017-03-01',0.00),
(1,'2017-04-01','2017-03-01',0.00),
(1,'2017-05-01','2017-03-01',0.00),
(2,'2017-06-01','2017-03-01',0.30),
(2,'2017-07-01','2017-03-01',0.00);
结果
id rate
1 0.4
2 0.3