Foreach循环在数据库SQL中

时间:2015-02-24 03:42:20

标签: sql sql-server sql-server-2000

我在数据库中有两个表(帐户和交易)。我想在Transaction表中获取帐户的最新交易。如果我这样做,让我们说PHP。它只是获取Account表中的所有帐户,存储在一个数组中。然后,通过在阵列上使用foreach循环,从每个帐户的Transaction表(事务日期的最新事务基础)中选择前1个事务。

我的问题是,是否可以直接从数据库进行循环? Foreach循环是准确的,所以我不必创建一个由任何编程语言(如PHP,Java等)制作的应用程序来获取数据。

谢谢!

PS:我正在使用SQL Server 2000

6 个答案:

答案 0 :(得分:3)

如果您想要特定帐户的最新交易,您可以这样做:

select t.*
from transactions t
where t.accountid = $accountid
order by datetime desc
limit 1;

答案 1 :(得分:1)

使用OUTER APPLY。即使没有帐户交易,它也会返回带有NULL的行。

SELECT * FROM Accounts a
OUTER APPLY (SELECT * FROM Transactions t WHERE t.AccountID = a.AccountID ORDER BY t.TransactionDate DESC)o

答案 2 :(得分:1)

这可以为您提供所有用户的最新交易信息......

SELECT t.*
From
transactions t1
INNER JOIN
(select max(t.transactionDate) transactionDate
, t.accountid
from transactions t
Group by t.accountid) t2
on ti.accountid=t2.accountid
and t1.transactionDate=t2.transactionDate
order by t1.transactionDate desc

假设:每个accountid只有一个与max transactiondate相关的交易

答案 3 :(得分:1)

要获取所有用户的最新交易,您可以使用此sql查询,您不必逐个输入帐户ID

SELECT *
FROM Transaction t, Account a
WHERE t.account_id = a.account_id
GROUP BY account_id 
ORDER BY updateTime DESC

答案 4 :(得分:1)

试试这个,它应该在SQL Server 2000中运行:

SELECT A.*, LastTrasaction.*
FROM
   Accounts A
   LEFT OUTER JOIN (
       SELECT T.*
       FROM Transactions T
       INNER JOIN
       (
           SELECT AccountId, MAX(TransactionId) AS TrasnactionId
           FROM Trasactions
           GROUP BY AccountId     
       ) LT ON T.TrasactionId = LT.TransactionId
   ) LastTrasaction ON A.AccountId = LastTrasnaction.AccountId

答案 5 :(得分:0)

select TOP (1) *
from transactions 
where accountid = "Pass AccountId Here"
order by datetime desc