【问题标题】:Eliminate all rows until certain value消除所有行直到某个值
【发布时间】:2013-01-09 20:11:52
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 你为什么不能select ... where Time > ....
  • @MiserableVariable - 因为他不知道时间值应该是多少。
  • 表的主键是什么?键入、行还是仅行?

标签: sql


【解决方案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

【讨论】:

  • 谢谢!我认为你的逻辑符合我的目的。
  • @user1949158 - 您可以通过单击问题旁边的复选标记来选择您正在使用的答案。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果我对您的问题的理解正确,您可以这样做吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多