2012-10-22 81 views
0

我正在开发一个使用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  

在这种检查是用于标识1 RemFee 1500发(因为它的ID1最后一条记录)。它大于0,因此打印记录。

+1

在SQL表中没有固有的顺序,您应该使用列来存储顺序,以便知道这是您最后一次插入的行。至于你有什么我们应该知道最后插入的行有一个1或2的Id。此外,你使用的是什么样的RDBMS,MS SQL Server,Oracle,MySQL? – Yaroslav

+0

这会失败,您需要添加至少一列,以指出每个ID的最新记录。 –

+0

@freelancer你最后一张唱片是什么意思?最后一个插入?你如何在这个表结构中维护插入顺序? –

回答

2

猜测你正在使用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 
+0

如果我只想在相同条件下使用id,该怎么办? – Freelancer

+0

检查我编辑的答案 – Yaroslav

1
SELECT ID,MIN(REMFEE) FROM payment WHERE ID NOT IN (SELECT ID FROM payment WHERE REMFEE = 0) GROUP BY ID 
+0

如果我只想打印ID,该怎么办? – Freelancer

0
Select 
    id, Min(RemFee) 
from payment 
where RemFee > 0 
group by id 
相关问题