我在数据库中有两个表(帐户和交易)。我想在Transaction表中获取帐户的最新交易。如果我这样做,让我们说PHP。它只是获取Account表中的所有帐户,存储在一个数组中。然后,通过在阵列上使用foreach循环,从每个帐户的Transaction表(事务日期的最新事务基础)中选择前1个事务。
我的问题是,是否可以直接从数据库进行循环? Foreach循环是准确的,所以我不必创建一个由任何编程语言(如PHP,Java等)制作的应用程序来获取数据。
谢谢!
PS:我正在使用SQL Server 2000
答案 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