本帖最后由 lilinqiang24 于 2014-11-26 15:08:55 编辑

解决方案 »

  1.   

    mysql> select max(t.create_time), max(t. name), max(t.fee) from (
        -> select create_time, name, '' as fee from user
        -> union all
        -> select create_time, '' as name, fee from pay
        -> ) t group by t.create_time
        -> order by create_time ;
    +--------------------+--------------+------------+
    | max(t.create_time) | max(t. name) | max(t.fee) |
    +--------------------+--------------+------------+
    | 2014-11-20         |              | 1.0        |
    | 2014-11-21         | tom          |            |
    | 2014-11-22         |              | 2.0        |
    | 2014-11-23         | jim          | 2.0        |
    | 2014-11-24         | lily         |            |
    +--------------------+--------------+------------+
    5 rows in set (0.01 sec)
      

  2.   


    mysql> select max(t.create_time), max(t. name), max(t.fee) from (
        -> select create_time, name, '' as fee from user
        -> union all
        -> select create_time, '' as name, fee from pay
        -> ) t group by t.create_time
        -> order by create_time ;
    +--------------------+--------------+------------+
    | max(t.create_time) | max(t. name) | max(t.fee) |
    +--------------------+--------------+------------+
    | 2014-11-20         |              | 1.0        |
    | 2014-11-21         | tom          |            |
    | 2014-11-22         |              | 2.0        |
    | 2014-11-23         | jim          | 2.0        |
    | 2014-11-24         | lily         |            |
    +--------------------+--------------+------------+
    5 rows in set (0.01 sec)
      

  3.   


    我说的左侧的时间不是两张表的createTime的排序,是一个新的时间,这样说吧,我是统计20号到25号的数据,这20号到25号的日期我怎么获得?不是从那两张表中获得的~
      

  4.   

    SQL需要根据你的业务逻辑要做改动, fee是要sum呢还是group by呢。 自己看着改吧。mysql> select t.create_time, t. name, sum(t.fee)  from ( 
        -> select create_time, name, '' as fee from user 
        -> union all 
        -> select create_time, '' as name, fee from pay ) t 
        -> group by t.create_time,t.name order by t.create_time;
    +-------------+------+------------+
    | create_time | name | sum(t.fee) |
    +-------------+------+------------+
    | 2014-11-20  |      |          1 |
    | 2014-11-21  | tom  |          0 |
    | 2014-11-22  |      |          2 |
    | 2014-11-23  |      |          2 |
    | 2014-11-23  | jim  |          0 |
    | 2014-11-24  | jim  |          0 |
    | 2014-11-24  | lily |          0 |
    +-------------+------+------------+
    7 rows in set (0.00 sec)mysql> 
      

  5.   


    我说的左侧的时间不是两张表的createTime的排序,是一个新的时间,这样说吧,我是统计20号到25号的数据,这20号到25号的日期我怎么获得?不是从那两张表中获得的~
    晕, 那你就用程序写吧。 或者存储过程。
      

  6.   


    我说的左侧的时间不是两张表的createTime的排序,是一个新的时间,这样说吧,我是统计20号到25号的数据,这20号到25号的日期我怎么获得?不是从那两张表中获得的~
    晕, 那你就用程序写吧。 或者存储过程。我考虑到用程序写,需要循环查询好多次,这样效率好低好低吧
      

  7.   

    最笨的方法
    select daily.create_date, IFNULL(tb.name, ''), IFNULL(tb.fee, '') from (
    select '2014-11-21' as create_date union all
    select '2014-11-22' as create_date union all
    select '2014-11-23' as create_date union all
    select '2014-11-24' as create_date union all
    select '2014-11-25' as create_date ) as daily
    left join 
    (select t.create_time, t. name, sum(t.fee) as fee from ( 
    select create_time, name, '' as fee from user 
    union all 
    select create_time, '' as name, fee from pay ) t 
    group by t.create_time,t.name order by t.create_time) as tb
    on daily.create_date = tb.create_time
      

  8.   


    mysql> select daily.create_date, IFNULL(tb.name, ''), IFNULL(tb.fee, '') from (
        -> select date_sub(curdate(), interval 5 day) as create_date union all
        -> select date_sub(curdate(), interval 4 day) as create_date union all
        -> select date_sub(curdate(), interval 3 day) as create_date union all
        -> select date_sub(curdate(), interval 2 day) as create_date union all
        -> select date_sub(curdate(), interval 1 day) as create_date ) as daily
        -> left join 
        -> (select t.create_time, t. name, sum(t.fee) as fee from ( 
        -> select create_time, name, '' as fee from user 
        -> union all 
        -> select create_time, '' as name, fee from pay ) t 
        -> group by t.create_time,t.name order by t.create_time) as tb
        -> on daily.create_date = tb.create_time;
    +-------------+---------------------+--------------------+
    | create_date | IFNULL(tb.name, '') | IFNULL(tb.fee, '') |
    +-------------+---------------------+--------------------+
    | 2014-11-21  | tom                 | 0                  |
    | 2014-11-22  |                     | 2                  |
    | 2014-11-23  |                     | 2                  |
    | 2014-11-23  | jim                 | 0                  |
    | 2014-11-24  | jim                 | 0                  |
    | 2014-11-24  | lily                | 0                  |
    | 2014-11-25  |                     |                    |
    +-------------+---------------------+--------------------+
    7 rows in set (0.00 sec)
    狼头有更好的方法吗???