假设我有这三个表:
╔═══╦════════════╦═════════════════════╗
║ ║ 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 ║
╚═══╩════════════╩═════════════════════╝
干杯!
答案 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 all
和row_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;