【问题标题】:How to find Last record in group如何查找组中的最后一条记录
【发布时间】:2014-06-07 10:03:30
【问题描述】:


下面是我的数据表:

+----------+--------------+--------+-------+---------------+-------------+--------+
| 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,依此类推。

预期输出:

+----+-------------------------+--------+---+----+----+---+
| 26 | 2014-04-10 15:35:30.000 | 104152 | 1 | 27 | 26 | 0 |
| 26 | 2014-04-10 15:35:30.000 | 104152 | 2 | 27 | 26 | 0 |
| 26 | 2014-04-10 15:35:44.000 | 104152 | 3 | 27 | 26 | 0 |
| 26 | 2014-04-10 15:35:44.000 | 104152 | 4 | 27 | 26 | 0 |
+----+-------------------------+--------+---+----+----+---+


我想将 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 

【问题讨论】:

  • 能不能格式化一下你的表结构,很难看
  • 好的,我会试试的……我是新来的。
  • 最后基于什么?日期,一些主键。一般来说,这种查询可以使用 row_number() over()。
  • 如果您提供您所期望的输出,其他成员可以更好地帮助您
  • 最后一条记录 104152 和 1 个这样的组合...

标签: sql inner-join inner-query


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

【讨论】:

  • 没有@meysam tolouee,它不希望它只显示1条记录,如果我的表包含200条记录,我期待100条记录
  • 其中 rn = 1,不选择前 1 ... order by?
  • 我用 cte 进行了内部连接以获得最大的 RN 并且它工作 select * From CTE c1 inner join ( select MAX(Rn) as Rn from CTE group by FolderNo,FormNo ) c2 On c1.Rn = c2.Rn 按 c1.FolderNo,c1.FormNo 排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多