我使用的是旧版本的sybase,它没有像lead这样的关键字。
我有一张如下所示的表格。
Type Row Time Quantity cat1 1 10:01:01.000 50 cat1 2 10:01.01.001 0 cat1 3 10:01:01.002 1000 cat1 4 10:01.01.003 100 cat1 5 10:01:03.001 100
我也有以上数据可用于cat2,cat3等。数据按时间顺序排列。
我想从上表生成一个新表,其中仅出现在10.01.01.002及更高版本的值将存在,因为它是满足最小所需数量1000的第一行/时间。即在新表中包括第3,4和5行,因为它仅在第3行满足最小数量。以上数据适用于cat1,cat2等。
上面的表格很大,所以我正在寻找一种有效的方法。
由于
答案 0 :(得分:1)
您可以使用TOP 1查找条件的第一项,然后在select语句中使用它。
喜欢这个(不确定您的确切要求)
declare @marker datetime
SELECT TOP 1 @marker = Time
FROM TableName
WHERE Quantity > 1000 ORDER BY Row DESC
SELECT *
FROM TableName
WHERE Time > @marker
答案 1 :(得分:0)
SELECT * FROM tables_name WHERE Row >= 3
我不确定我是否理解你的问题。你真的想要包括第三行之后的行,还是只是作为格式化的一部分自动添加?这仅在Row是主键时才有效。
答案 2 :(得分:0)
如果我正确理解你的问题,你可以做这样的事吗?
SELECT *
FROM TABLE T
JOIN (
SELECT Type, Row
FROM TABLE
WHERE Quantity >= 1000
) T2 ON T.Type = T2.Type
WHERE T.Row >= T2.Row
这是SQLFiddle(使用SQL Server授予,因为我没有看到sybase作为选项,但我相信sybase支持子查询)