这是我表格中的数据。我想要的是每个订单号的最大序列号。
Order No seq Sta
--------------------
32100 1 rd
32100 3 rd
23600 1 rd
23600 6 rd
我想在不使用光标的情况下获得以下结果。
输出:
Order No seq Sta
-----------------
32100 3 rd
23600 6 rd
答案 0 :(得分:3)
如果您想要完整记录,可以使用ROW_NUMBER
:
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY Order ORDER BY No_Seq DESC) AS rn
FROM tab) s
WHERE rn = 1;
<强> DBFiddle Demo 强>
请不要在列名中使用Order
等关键字和空格。
答案 1 :(得分:1)
最简单的解决方案是将JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();",driver.findElement(By.xpath("//span[@class='download-data-link']//a")));
与group by
一起使用。
尝试一下:
max
答案 2 :(得分:0)
只需按顺序使用组,按顺序desc排序,您就可以获得记录。
答案 3 :(得分:0)
如果您使用 Oracle 数据库,则可以使用 ROW_NUMBER()分析函数来实现此结果
尝试以下查询:
select
*
from
(select
ROW_NUMBER() OVER (PARTITION BY order_no ORDER BY seq DESC) as "ROW_NUM",
order_no, seq, sta
from
Order_Details) temp
where
temp.row_num = 1 ;
<强> Demo 强>
答案 4 :(得分:0)
以下可能是大多数数据库中最有效的解决方案(使用正确的索引):
select t.*
from t
where t.seq = (select max(t2.seq) from t t2 where t2.orderno = t.orderno);
您也可以使用group by
:
select orderno, max(seq), sta
from t
group by orderno, sta;
请注意,select
中引用的所有列都是group by
个键或聚合函数的参数。这是正确的SQL。