Mysql SQL使用同一个表组合3个查询
我有3个查询,共享同一个表,查询1如下:Mysql SQL使用同一个表组合3个查询,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有3个查询,共享同一个表,查询1如下: SELECT MAX(TranDate) AS MaxDate FROM tblTransaction WHERE AccNo = 12345 SELECT MAX(TransactionID) AS MaxTran FROM tblTransaction WHERE AccNo = 12345 AND TranDate = 'pass max tran date here' SELECT Commission FROM tblTransac
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = 'pass max tran date here'
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = 'pass max tranID here'
在得到账户12345的最大交易日期后,我想使用最大日期在查询2中找到最大交易ID,如下所示:
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = 'pass max tran date here'
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = 'pass max tranID here'
之后,我想将查询2中的最大事务ID传递给查询3,如下所示:
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = 'pass max tran date here'
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = 'pass max tranID here'
如何组合这3个查询?谢谢使用此查询:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = (
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = (
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
)
)
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = (
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = (
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
)
);
使用此查询:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = (
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = (
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
)
);
简单地说:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = (
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = (
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
)
)
简单地说:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
AND TransactionID = (
SELECT MAX(TransactionID) AS MaxTran
FROM tblTransaction
WHERE AccNo = 12345
AND TranDate = (
SELECT MAX(TranDate) AS MaxDate
FROM tblTransaction
WHERE AccNo = 12345
)
)
请给我一张桌子
检查以下查询:
SELECT commission
FROM tbltransaction
WHERE accno = 12345
AND TransactionID = (
SELECT MAX(tbl1.TransactionID) AS MaxTran
FROM tbltransaction AS tbl1
WHERE tbl1.accno = 12345
AND tbl1.trandate = (
SELECT MAX(tbl2.trandate) AS MaxDate
FROM tbltransaction AS tbl2
WHERE tbl2.accno = 12345
)
)
请给我一张桌子
检查以下查询:
SELECT commission
FROM tbltransaction
WHERE accno = 12345
AND TransactionID = (
SELECT MAX(tbl1.TransactionID) AS MaxTran
FROM tbltransaction AS tbl1
WHERE tbl1.accno = 12345
AND tbl1.trandate = (
SELECT MAX(tbl2.trandate) AS MaxDate
FROM tbltransaction AS tbl2
WHERE tbl2.accno = 12345
)
)
就我个人而言,我倾向于使用内部查询问题的语法 (此解决方案是针对sql server的,我甚至不知道mysql是否支持此功能)
显然,这比上面的解决方案更详细,但是您可以将这种查询(不包括WHERE)放在函数中,并根据需要更改条件。例如,您可以使用这样一个函数来生成一个列表,其中列出了最近一次交易佣金>100的所有用户。就个人而言,我倾向于使用内部查询问题的语法 (此解决方案是针对sql server的,我甚至不知道mysql是否支持此功能)
显然,这比上面的解决方案更详细,但是您可以将这种查询(不包括WHERE)放在函数中,并根据需要更改条件。例如,您可以使用这样一个函数来生成最后一笔交易佣金>100的所有用户的列表。以下是解决您问题的另一种方法
SELECT
t1.COMISSION,
t2.MaxTran,
t3.MaxDate
FROM tblTransaction t1
INNER JOIN (SELECT MAX(TransactionID) as MaxTran FROM tblTransaction) t2
ON t1.TransactionID = t2.MaxTran
INNER JOIN (SELECT MAX(TranDate) as MaxDate FROM tblTransaction) t3
ON t1.TranDate = t3.MaxDate
WHERE
1 = 1
AND t1.ACCNO = 12345
这里有一个不同的方法来回答你的问题
SELECT
t1.COMISSION,
t2.MaxTran,
t3.MaxDate
FROM tblTransaction t1
INNER JOIN (SELECT MAX(TransactionID) as MaxTran FROM tblTransaction) t2
ON t1.TransactionID = t2.MaxTran
INNER JOIN (SELECT MAX(TranDate) as MaxDate FROM tblTransaction) t3
ON t1.TranDate = t3.MaxDate
WHERE
1 = 1
AND t1.ACCNO = 12345
假设
tblTransaction
将TransactionID
作为主键,您可以使用更简单的forMySQL:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC
LIMIT 1 ;
SELECT TOP (1) Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC ;
对于SQL Server:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC
LIMIT 1 ;
SELECT TOP (1) Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC ;
假设
tblTransaction
将TransactionID
作为主键,您可以使用更简单的forMySQL:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC
LIMIT 1 ;
SELECT TOP (1) Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC ;
对于SQL Server:
SELECT Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC
LIMIT 1 ;
SELECT TOP (1) Commission
FROM tblTransaction
WHERE AccNo = 12345
ORDER BY TranDate DESC,
TransactionID DESC ;
那么,您使用的是哪种数据库管理系统?mysql还是sql server?那么,您使用的是哪种DBMS?mysql或sql server?此查询中不需要表别名此查询中不需要表别名