根据mySQL中的validFrom日期查找具有今天有效价格的行

时间:2018-01-21 14:29:29

标签: mysql sql qsqlquery

来了。我有以下数据:

type, validfrom, price
1, 2018-01-15, 10 
1, 2018-01-20, 20 
1, 2018-01-25, 30 
2, 2018-01-01, 12 
3, 2018-01-01, 18

今天,它是 2018-01-21 ,我需要一个产生以下结果的查询:

1, 2018-01-20, 20
2, 2018-01-01, 12
3, 2018-01-01, 18

我尝试了使用子选择和分组的不同组合,但我找不到一个很好的简短查询来解决这个问题(这也很有用)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在MySQL中,你可以这样做:

select t.*
from t
where t.validfrom = (select max(t2.validfrom)
                     from t t2
                     where t2.type = t.type and
                           t2.validfrom < now()
                    );

使用t(type, validfrom)上的索引,这应该具有非常好的性能。

答案 1 :(得分:0)

http://sqlfiddle.com/#!9/47c9e5/8

SELECT p.*
FROM prices p
LEFT JOIN prices p_
ON p.type = p_.type
   AND p.validfrom < p_.validfrom
   AND p_.validfrom< NOW()
WHERE p_.type IS NULL
    AND p.validfrom<=NOW()