【问题标题】:Get Top Few Rows which satifies the Condition [duplicate]获取满足条件的前几行[重复]
【发布时间】:2018-09-19 15:43:53
【问题描述】:

我需要获得 C = '1' 的前两行, 我按时间戳降序订购查询,我不想要 查询要获取的最后一行

    A      B  C   TimeStamp
 ------------------------------------
  foo    one  1   20180405153936
  foo    two  1   20180405153936
  foo    two  2   20180405115417
  foo    one  2   20180405115053
  foo  three  1   20180405113923

【问题讨论】:

  • 你试过查询了吗?
  • 不,我无法弄清楚@Tim
  • 我不明白为什么人们反对投票,您可以评论问题出了什么问题。你不应该劝阻新来的人。请
  • 我没有对你投反对票,但这可能是因为你表现出零努力。
  • 由于我的 SQL 不太好,我无法弄清楚。我以后一定会学习的

标签: sql oracle oracle11g


【解决方案1】:

您可以使用ROWNUM 构造,但请记住,除非您包装排序选择,否则ROWNUM 将按添加到表中的任何顺序恢复行。

SELECT * FROM
    (SELECT * FROM 
         yourTable
     WHERE C = 1 
     ORDER BY "TimeStamp" DESC)
WHERE ROWNUM <= 2 

编辑

鉴于添加的信息,以下内容可能比使用ROWNUM 更好。

SELECT * FROM 
    yourTable
WHERE 
    C = 1 AND 
    "TimeStamp" > (
        SELECT MIN("TimeStamp") FROM yourTable WHERE C = 1
    ) 
ORDER BY "TimeStamp" DESC

【讨论】:

  • 问题是我不知道顶部有多少行满足条件。
【解决方案2】:

你可以使用ROWNUM

SELECT * FROM
(SELECT * FROM 
     Table1 
 WHERE C=1
 ORDER BY "TimeStamp" DESC)
WHERE ROWNUM <= (SELECT COUNT(*) FROM Table1 WHERE C=1)-1

演示

http://sqlfiddle.com/#!4/08ed98/11

【讨论】:

  • 其实不是固定为两排,也可能更多在Top
  • 所以你可以代替 2 写任何数字
  • 这是不可能的,我不知道顶部有多少行,它是动态生成的
  • 这行不通。尝试先插入第三行,看看得到什么结果。
  • 现在检查答案我编辑了我的答案@ViKu
猜你喜欢
  • 2021-05-15
  • 2017-10-13
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多