【问题标题】:selecting last record from table从表中选择最后一条记录
【发布时间】:2012-10-22 15:32:25
【问题描述】:

我正在开发一个使用 oledb 连接的 c# 应用程序。

我的桌子在后面

付款

Id   RemFee
1     2000
2     2500
1     1500
3     8000
3     5000
2      500
3        0

我只想选择并检查每个 Id 的最后一条记录,并将 Remfee 与 0 进行比较。如果大于 0,则打印该记录。即我的预期结果是:

Id  
1    
2     

在此检查中,对 RemFee 1500 的 Id 1 进行检查(因为它是 Id1 的最后一条记录)。它大于 0,因此打印记录。

【问题讨论】:

  • SQL 表中没有固有的顺序,您应该使用列来存储顺序,这样您就知道最后插入的行是哪一行。至于你有什么,我们应该如何知道最后插入的行的 Id 为 1 或 2。另外,你使用的是哪个 RDBMS,MS SQL Server、Oracle、MySQL?
  • 这会有点失败,您需要添加至少一列来指出每个 ID 的最新记录。
  • @freelancer 你最后的记录是什么意思?最后插入的?在这个表结构中如何维护插入顺序?
  • 每个 id.i.e. 的最后一条记录Id 1 的最后一条记录是 1500 Id 2 是 500,依此类推
  • 是的,只要看屏幕上的表格就很容易说。但是 sql 引擎不是这样操作的。它不会根据 order 区分这些记录

标签: c# sql database oledb


【解决方案1】:

猜测您正在使用 MSQ SQL Server 并且没有行知道您最后插入的行。试试这个代码:

SELECT Id, Min(RemFee) AS RemFee
  FROM payment
 WHERE RemFee > 0
 GROUP BY ID

这是一个SQL Fiddle working代码示例

编辑

如果您只想要这里的 ID 字段是一个选项,以及 SQL Fiddle code

SELECT myTable.Id
  FROM (SELECT Id as ID, Min(RemFee) AS Remfee
          FROM payment
         WHERE RemFee > 0
         GROUP BY ID
        ) myTable

【讨论】:

  • 如果在相同条件下我只想要 id 作为结果怎么办?
【解决方案2】:
SELECT ID,MIN(REMFEE) FROM payment WHERE ID NOT IN (SELECT ID FROM  payment  WHERE REMFEE  = 0) GROUP BY ID

【讨论】:

  • 如果我只想打印 id 怎么办?
【解决方案3】:
Select 
   id, Min(RemFee) 
from payment 
where RemFee > 0 
group by id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2013-03-05
    相关资源
    最近更新 更多