我有一张这样的表:
{{1}}
值是100和0之间的百分比,除了每个周期一次外总是减少,但几乎从不完全是0或100,只是大约。 是否有一个简单的选择查询来获取具有最新低值的行?在这种情况下,10 ID。 提前感谢您的帮助。
更新
Tim Biegeleisen说,这是一个差距和岛屿问题。我想要表格中最后一行,前后两个值都较大,除了最后一行的情况。
答案 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
但我不认为这是必要的。