SQL-从3个表中检索结果并按日期排序

时间:2018-08-03 11:16:24

标签: mysql sql sqlite

假设我有这三个表:

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bob        ║ 2018-07-30 14:20:03 ║
║ 2 ║ Dylan      ║ 2018-07-29 14:20:03 ║
║ 3 ║ Frank      ║ 2018-07-17 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bernard    ║ 2018-07-31 14:20:03 ║
║ 2 ║ Max        ║ 2018-07-28 14:20:03 ║
║ 3 ║ Dan        ║ 2018-07-16 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Maria      ║ 2018-07-12 14:18:03 ║
║ 2 ║ Sofia      ║ 2018-07-30 14:23:03 ║
║ 3 ║ Lila       ║ 2018-07-25 14:22:03 ║
╚═══╩════════════╩═════════════════════╝

我想知道如何选择前3个元素(按日期排序(从现在开始是最近的日期)),以便最后,我的查询结果如下所示:

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bernard    ║ 2018-07-31 14:20:03 ║
║ 2 ║ Sofia      ║ 2018-07-30 14:23:03 ║
║ 3 ║ Bob        ║ 2018-07-30 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

干杯!

2 个答案:

答案 0 :(得分:2)

values, err := redis.Values(c.Do("hgetall", value))
if err != nil {
    fmt.Println("HGETALL", err)
}

/*
type UD struct {
    created_at  string
    B           time.Time
    ended_at    string
    data        string
    status      string
}
*/
if err := redis.ScanStruct(values, &UD); err != nil {
    fmt.Println(err)
}

答案 1 :(得分:0)

您需要union allrow_number()

select t.*
from ( select *, row_number() over (partition by tablename order by date desc) seq
       from ( (select name, date, 'table1' as tablename
               from table1 t1
              ) union all
              (select name, date, 'table2'
               from table2 t2
              ) union all
              (select name, date, 'table3'
               from table3 t3
              )
           ) t
     ) t
where seq = 1;