Mysql SQL使用同一个表组合3个查询

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

我有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 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?此查询中不需要表别名此查询中不需要表别名