我有一张类似于此的表
timestamp val
2017-05-04 06:00:00 2
2017-05-04 08:00:00 3
2017-05-04 09:35:00 5
2017-05-04 10:05:00
2017-05-04 11:15:00 8
2017-05-04 12:10:00
2017-05-04 13:35:00 12
并且我想在val字段中的第一个null之前找到记录(示例表中的时间戳为09:35的那个)。
有一种简单的方法吗?
由于
编辑:使用postgres 9.5 编辑2:对不起每个人我忘了提及有时候没有空值,在这种情况下我只需要最大时间戳。到目前为止提供的答案在这种情况下不起作用(对于原始问题中的松散解释再次感到遗憾)
答案 0 :(得分:5)
lead()函数使用特定顺序返回分区的下一个值。
如果没有空值,此解决方案将返回最后一条记录。
with lg as ( select tm, val, lead(val) over (order by tm) next_val from your_table ) select tm as "timestamp", val from lg where next_val is null order by tm limit 1;
timestamp | val :------------------ | --: 2017-05-04 09:35:00 | 5
dbfiddle here
答案 1 :(得分:0)
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
Window {
visible: true
width: 640
height: 480
title: qsTr("PathView path test")
Path {
id: path1
startX: 100; startY: 100
PathLine{ x: 300; y: 100 }
}
Path {
id: path2
startX: 100; startY: 100
PathLine{ x: 100; y: 300 }
}
ListModel {
id: pvModel
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
}
Component {
id: pvDelegate
Rectangle {
width: 50
height: 50
color: "red"
border.width: 1
Component.onCompleted: console.log("Rectangle created")
Component.onDestruction: console.log("Rectangle deleted")
}
}
property bool currentPath;
PathView {
anchors.fill: parent
model: pvModel
delegate: pvDelegate
path: (currentPath ? path1 : path2)
}
Button {
width: 100
height: 40
text: "Switch path"
onClicked: currentPath = !currentPath
}
}
答案 2 :(得分:0)
如果不是null值,它将返回第一个空值记录上方的最后一行。
select t.*
from t
where t.timestamp <= (select min(t2.timestamp)
from NAMEs t2
where (t2.val is null or t2.timestamp = (select max(timestamp) from NAMES) )
)
and t2.val is not null
order by t.timestamp desc
limit 1 ;