正如标题所说,如何 Select 每个assets资源 代码分组的最大序列号的行.

我try 了IN子句运算符,但它不需要两列.

AssetCode             SeqNo
---------------------------
AWET-2015-00001         1
AWET-2015-00001         2
AWET-2015-00001         3
AWET-2015-00001         4
AWET-2015-00002         1
AWET-2015-00002         2
AWET-2015-00002         3

代码:

SELECT * 
FROM E_FixedAssetLedger
WHERE Fal_AssetCode, Fal_SeqNo IN (SELECT Fal_AssetCode, MAX(Fal_SeqNo)
                                   FROM E_FixedAssetLedger
                                   GROUP BY Fal_AssetCode)

推荐答案

我们可以try 使用聚合函数子查询和JOIN来实现它.

SELECT f.*
FROM E_FixedAssetLedger f
INNER JOIN (
    SELECT Fal_AssetCode,Max(Fal_SeqNo) Fal_SeqNo
    FROM E_FixedAssetLedger
    GROUP BY Fal_AssetCode
) fa ON f.Fal_AssetCode = fa.Fal_AssetCode
AND f.Fal_SeqNo = fa.Fal_SeqNo

如果您的RDBMS支持窗口函数,我们可以try 使用ROW_NUMBER窗口函数来获得Max(SeqNo)个窗口

SELECT *
FROM (
 SELECT *,
    ROW_NUMBER() OVER(PARTITION BY AssetCode ORDER BY  SeqNo DESC) rn
 FROM E_FixedAssetLedger
) t1
WHERE rn = 1

Sql相关问答推荐

如何连接第二个表并将其内容输入到第一个表的单个字段中?

Postgres:对包含数字的字符串列表进行排序

使用Lead获取下一个不同的日期

转换表中的数据

SQL Oracle条件分组依据

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

从原始表列中经过JSON字符串化的对象数组构建视图

基于多列比较连接两个表

如何为缺少的类别添加行

基于开始/结束日期重叠的BigQuery突发行

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

复制行并根据 Oracle SQL 中其他表的值更改值

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

使用 SQL 计算一年中任意 3 个月期间的总成本

Clob 问题 - 将 clob 列拆分为多行

在 MySql 数据库中的两个日期之间搜索

SQL/Postgres:按日期和其他属性对相关性能进行分组

snowflake插入覆盖行为

当我按 PK 分组时,该表中的所有列在每个组中都具有相同的值.那么为什么 SQL Server 需要对这些列进行聚合呢?

Presto SQL - 将 varchar 中的日期转换为日期格式时出现问题