Sql 如何查找组中的最后一条记录

Sql 如何查找组中的最后一条记录,sql,inner-join,inner-query,Sql,Inner Join,Inner Query,以下是我的数据表: +----------+--------------+--------+-------+---------------+-------------+--------+ | RegionID | ReceivedDate | FdNo | FmNo | FromRegionID | ToRegionID | HFlag | +----------+--------------+--------+-------+---------------+------------

以下是我的数据表:

+----------+--------------+--------+-------+---------------+-------------+--------+
| RegionID | ReceivedDate | FdNo   | FmNo  | FromRegionID  | ToRegionID  | HFlag  |
+----------+--------------+--------+-------+---------------+-------------+--------+
| 26       | 2014-04-10   | 104152 | 1     | 26            | 27          | 1      |
| 26       | 2014-04-10   | 104152 | 1     | 27            | 26          | 0      |
| 26       | 2014-04-10   | 104152 | 2     | 26            | 27          | 1      |
| 26       | 2014-04-10   | 104152 | 2     | 27            | 26          | 0      |
| 26       | 2014-04-10   | 104152 | 3     | 26            | 27          | 1      |
| 26       | 2014-04-10   | 104152 | 3     | 27            | 26          | 0      |
| 26       | 2014-04-10   | 104152 | 4     | 26            | 27          | 1      |
| 26       | 2014-04-10   | 104152 | 4     | 27            | 26          | 0      |
+----------+--------------+--------+-------+---------------+-------------+--------+
我想从每组fdNo中选择最后一条记录。在示例表中,我给出了重复计数为2的数据,在实际情况中可能是3,4,依此类推

预期产出:

我想将Ans查询附加到我的原始查询中,实际表是从该原始查询中生成的

原始查询:

SELECT tblreceipt.regionid, 
       tblreceipt.receiveddate, 
       tblreceipt.folderno, 
       tblreceipt.formno, 
       tbltransite.dispatchfromregionid, 
       tbltransite.dispatchtoregionid, 
       tbltransite.horeceivedflag 
FROM   tblreceipt 
       LEFT OUTER JOIN tbltransite 
                    ON tblreceipt.folderno = tbltransite.folderno 
WHERE  tblreceipt.folderno = 104152 

你能格式化你的表格结构吗?很难读懂。好的,我会试试的。。我是sof新手。最后基于什么?日期,一些主键。一般来说,您可以在这种查询中使用row_number over。如果您提供所需的输出,其他成员可以帮助您更好地使用104152的最后一条记录和1个类似的组合…不@meysam tolouee,它不希望只显示1条记录,如果我的表包含200条记录,我希望有100条记录,其中rn=1,而不是选择top 1。。。order by?我为RN的最大值与cte进行了内部连接,它的工作方式是从cte c1内部连接选择*从cte组中选择MAXRn作为RN按FolderNo,c1上的FormNo c2。RN=c2。RN按c1进行顺序。FolderNo,c1.FormNo
SELECT tblreceipt.regionid, 
       tblreceipt.receiveddate, 
       tblreceipt.folderno, 
       tblreceipt.formno, 
       tbltransite.dispatchfromregionid, 
       tbltransite.dispatchtoregionid, 
       tbltransite.horeceivedflag 
FROM   tblreceipt 
       LEFT OUTER JOIN tbltransite 
                    ON tblreceipt.folderno = tbltransite.folderno 
WHERE  tblreceipt.folderno = 104152 
With CTE As (
select  tblReceipt.RegionID,
        tblReceipt.ReceivedDate, 
        tblReceipt.FolderNo,
        tblReceipt.FormNo,
        tblTransite.DispatchFromRegionID,
        tblTransite.DispatchToRegionID,
        tblTransite.HOReceivedFlag,
        Row_Number() Over(Order By FmNo, HFlag) A Rn
        from     tblReceipt
                      left outer join
                 tblTransite
                      on tblReceipt.FolderNo = tblTransite.FolderNo
        where    tblReceipt.FolderNo = 104152
        )
        Select Top 1 From CTE Order By Rn Desc