从表中选择最后一个低值

时间:2016-07-29 05:25:15

标签: mysql gaps-and-islands

我有一张这样的表:

{{1}}

值是100和0之间的百分比,除了每个周期一次外总是减少,但几乎从不完全是0或100,只是大约。 是否有一个简单的选择查询来获取具有最新低值的行?在这种情况下,10 ID。 提前感谢您的帮助。

更新

Tim Biegeleisen说,这是一个差距和岛屿问题。我想要表格中最后一行,前后两个值都较大,除了最后一行的情况。

5 个答案:

答案 0 :(得分:0)

要获取最新值,请按日期应用排序,然后按值

Select top(1) * from table order by datestamp desc, value

答案 1 :(得分:0)

通过id desc limit 1

从表顺序中选择id,name

答案 2 :(得分:0)

它应该适合你:

SELECT TOP 1
    id
    , value
    , datestemp 
FROM yourtable yt1
INNER JOIN 
(
    SELECT 
        MIN(yt2.value) minval
        , MONTH(yt2.datestamp) datemonth 
    FROM yourtable yt2
    GROUP BY MONTH(yt2.datestamp)
) yt3 ON yt3.minval = yt1.value AND yt3.datemonth = MONTH(yt1.datestamp)
ORDER BY yt1.datestamp DESC

不知道My Sql是否支持TOP子句。如果一个月内有一个最小值,那么您将不需要top子句。该查询基于以下事实:您选择的最小值是最近一个月。

更新

我认为你想要的是:

SELECT * FROM 
(
    SELECT * FROM yourtable ORDER BY datestamp DESC LIMIT 2
) S 
ORDER BY value LIMIT 1

答案 3 :(得分:0)

你可能会试试这个

select * form tbl_name order by id desc limit 1

答案 4 :(得分:0)

虽然这对于人类来说是一项简单的任务,但在SQL

中很难表达
  

值是100和0之间的百分比,除了每个周期一次外总是递减

我通过自联接解决了这个问题,这应该可以提供最佳性能。但是,您应该在datestamp上创建(如果尚未完成)索引。

SELECT a.*
FROM tbl1 a
INNER JOIN tbl1 b ON b.datestamp > a.datestamp
WHERE b.value > a.value
GROUP BY a.id
ORDER BY a.datestamp DESC, b.datestamp DESC
LIMIT 1

<强>更新

  

我希望表格中的最后一行显示前后的值

如果你想确定你能做到这一点

SELECT a.*
FROM tbl1 a
INNER JOIN tbl1 b ON b.datestamp > a.datestamp
INNER JOIN tbl1 c ON c.datestamp < a.datestamp
WHERE b.value > a.value
AND c.value > a.value
GROUP BY a.id
ORDER BY a.datestamp DESC, b.datestamp DESC
LIMIT 1

但我不认为这是必要的。