SQL计数,仅使用最后一条记录

时间:2014-04-29 08:31:42

标签: sql count

有人可以帮助我计算sql中的行数。我有一个表格,存档,我有银行帐户和该帐户的状态。一个帐户可以拥有并且通常拥有更多记录,在我的计数中我必须使用最后一条记录,而不是之前的记录。例如:

account         status
5552222           A
5552222           B
5552222           A
**5552222           B**
4445896           A
4445896           B
**4445896           A**

我必须使用大胆的人。基于此,有一个B(被阻止)和一个A(有效)帐户。我有列日期时间,可以告诉我最后一条记录是什么。我只需要查询来计算

2 个答案:

答案 0 :(得分:0)

SELECT COUNT(*)  
FROM yourTable
WHERE Status='B'

WHERE AccountName LIKE '%B'

编辑:OP修改问题后包含表格数据。

因此,问题是相同的帐号可能会多次出现,并且您希望依据帐户的最后状态来计算。 如果该帐户目前被屏蔽,您可以计算该帐号,而不管它之前被阻止的次数。

假设:您的表中有一个日期类型列,其中显示了插入记录(具有新状态值)的日期(或者它可能是一个标识字段,用于跟踪表中创建的记录的顺序)

查询将是:

SELECT COUNT (*)
FROM
  (
    SELECT DISTINCT 
         acNumber, 
         (  SELECT Max(identityField_or_dateField) 
            FROM tableName t  
            WHERE t.acNumber = t2.acNumber AND Status='B')
    FROM tableName t2
    WHERE 
         (  SELECT Max(identityField_or_dateField) 
            FROM tableName t  
            WHERE t.acNumber = t2.acNumber AND Status='B') IS NOT NULL
) tblAlias

很高兴帮忙!如果您觉得有帮助,请记得接受答案。

答案 1 :(得分:0)

假设您想根据帐户的最新行计算:

SELECT tab.status,
   COUNT(*)
FROM tab JOIN
 (
   SELECT account, MAX(datetime) AS maxdate
   FROM tab
   GROUP BY account
 ) AS dt
ON tab.account = dt.account
AND tab.datetime = dt.maxtime
GROUP BY tab.Status