Mysql 当日期来自两个字段时,如何维护日期字段顺序?

Mysql 当日期来自两个字段时,如何维护日期字段顺序?,mysql,Mysql,我有两个表交易和费用。我已经编写了一个查询来获取日期相关的事务语句。这里的交易表是存款表。对于这个查询,我得到了我想要的结果,没有订单日期 SELECT IFNULL(date(t1.created), date(ex.created)) as Date , sum(t1.amount) as ReceiveAmount,ex.amount as ExpensesAmount FROM transactions as t1 LEFT JOIN ( SELECT

我有两个表交易费用。我已经编写了一个查询来获取日期相关的事务语句。这里的交易表是存款表。对于这个查询,我得到了我想要的结果,没有订单日期

SELECT IFNULL(date(t1.created), date(ex.created)) as Date , sum(t1.amount) as ReceiveAmount,ex.amount as ExpensesAmount 
    FROM transactions as t1
    LEFT JOIN (
        SELECT sum(e.amount) as amount, created
           FROM expenses as e 
           group by date(e.created)
        ) as ex
    ON date(ex.created) =  date(t1.created)
    GROUP BY date(t1.created)

    UNION

    SELECT IFNULL(date(t1.created), date(ex.created)) as Date, sum(t1.amount) as Receive,ex.amount as ExpensesAmount 
    FROM transactions as t1

    RIGHT JOIN (
        SELECT sum(e.amount) as amount, created
        FROM expenses as e 
        group by date(e.created)
    ) as ex
    ON date(t1.created) = date(ex.created)
    GROUP BY date(t1.created)
输出:

Date       ReceiveAmount    ExpensesAmount  
2018-12-04     600            NULL
2019-08-01     500            NULL
2019-10-18     500            NULL
2019-11-18     820            500  <== that should come at last.
2019-11-04     NULL           100
日期收到金额支出金额
2018-12-04 600零
2019-08-01 500零
2019-10-18 500零

2019-11-18 820 500在将工会的两半放在括号中后,您可以在工会查询中添加一个
ORDER BY
子句:

(SELECT IFNULL(t1.created, DATE(ex.created)) AS Date, SUM(t1.amount) AS ReceiveAmount,
     ex.amount AS ExpensesAmount 
FROM transactions as t1
LEFT JOIN
...
)

UNION ALL

(SELECT IFNULL(t1.created, DATE(ex.created)), SUM(t1.amount), ex.amount
FROM transactions as t1
RIGHT JOIN
...
)
ORDER BY Date

我在这里假设您真的想要一个
联合所有
,而不是
联合
。请注意,在大多数其他RDBMS中,您必须使用正式的子查询将
ORDER BY
子句应用于整个联合查询。

ORDER BY Date
添加到您的查询中。请参阅