1

我使用的是旧版本的 sybase,它没有像 Lead 这样的关键字。

我有一张如下图所示的表格。

类型 行 时间 数量        
第一类 1 10:01:01.000 50          
猫 1 2 10:01.01.001 0          
1 类 3 10:01:01.002 1000          
1 类 4 10:01.01.003 100          
1 类 5 10:01:03.001 100          

我也有上述数据可用于 cat2、cat3 等。数据按时间递增的顺序排列。

我想从上表中生成一个新表,其中的值仅从 10.01.01.002 开始,因为它是满足最低要求数量 1000 的第一行/时间。即在新表中包括第 3、4 和 5 行,因为只有在第 3 行才满足最小数量。以上数据是针对cat1、cat2等的。

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

谢谢

4

3 回答 3

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
于 2013-01-09T20:16:57.007 回答
0

SELECT * FROM tables_name WHERE Row >= 3
我不确定我是否正确理解了您的问题。您是否真的想要第三行之后的行,或者它们只是作为格式的一部分自动添加?这仅在 Row 是主键时才有效。

于 2013-01-09T20:15:11.343 回答
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 支持子查询)

于 2013-01-09T20:18:33.167 回答