消除所有行直到达到某个值

时间:2013-01-09 20:11:53

标签: sql

我使用的是旧版本的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等。

上面的表格很大,所以我正在寻找一种有效的方法。

由于

3 个答案:

答案 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支持子查询)