Postgresql select 最小日期值
Postgresql select min Date value
这些是我的 table:
table: 门票
- ticketid:序列号
- 用户 ID:整数
- 日期票:日期
- timeticket: 时间
table:用户
- 用户ID:序列号
- 用户名:varchar
- 密码:varchar
这些是我的数据:
userid username password
1 user1 123
2 user2 123
ticketid userid dateticket timeticket
1 1 2015-05-27 14:47:14
2 1 2015-05-27 14:47:15
3 1 2015-05-27 14:47:16
4 2 2015-05-27 14:47:17
5 2 2015-05-27 14:47:18
6 2 2015-05-12 14:47:19
我想显示分配给具有用户 ID 和最小日期的用户的工单数量。
我当前的查询是:
select
min(t.dateticket) as mydate,
(select min(ti.timeticket) as mytime from tickets ti where ti.userid=t.userid),
t.userid,
count(t.ticketid) as my_all
from
tickets t
group by
t.userid
order by
my_all asc,
mydate asc,
mytime asc;
The current result is:
mydate mytime userid my_all
2015-05-27 14:47:14 1 3
2015-05-12 14:47:17 2 3
The expected result is:
mydate mytime userid my_all
2015-05-12 14:47:19 1 3
2015-05-27 14:47:14 2 3
我认为这会满足您的要求:
select distinct on (userid) dateticket, timeticket, userid,
count(*) over (partition by userid) as my_all
from tickets t
order by userid, dateticket, timeticket;
distinct on
returns每组第一条记录,基于order by
。诀窍是使用 window 函数获取所有门票的数量。
编辑:
要进行额外排序,请使用子查询:
select t.*
from (select distinct on (userid) dateticket, timeticket, userid,
count(*) over (partition by userid) as my_all
from tickets t
order by userid, dateticket, timeticket
) t
order by my_all, dateticket, timeticket.
这些是我的 table:
table: 门票
- ticketid:序列号
- 用户 ID:整数
- 日期票:日期
- timeticket: 时间
table:用户
- 用户ID:序列号
- 用户名:varchar
- 密码:varchar
这些是我的数据:
userid username password
1 user1 123
2 user2 123
ticketid userid dateticket timeticket
1 1 2015-05-27 14:47:14
2 1 2015-05-27 14:47:15
3 1 2015-05-27 14:47:16
4 2 2015-05-27 14:47:17
5 2 2015-05-27 14:47:18
6 2 2015-05-12 14:47:19
我想显示分配给具有用户 ID 和最小日期的用户的工单数量。
我当前的查询是:
select
min(t.dateticket) as mydate,
(select min(ti.timeticket) as mytime from tickets ti where ti.userid=t.userid),
t.userid,
count(t.ticketid) as my_all
from
tickets t
group by
t.userid
order by
my_all asc,
mydate asc,
mytime asc;
The current result is:
mydate mytime userid my_all
2015-05-27 14:47:14 1 3
2015-05-12 14:47:17 2 3
The expected result is:
mydate mytime userid my_all
2015-05-12 14:47:19 1 3
2015-05-27 14:47:14 2 3
我认为这会满足您的要求:
select distinct on (userid) dateticket, timeticket, userid,
count(*) over (partition by userid) as my_all
from tickets t
order by userid, dateticket, timeticket;
distinct on
returns每组第一条记录,基于order by
。诀窍是使用 window 函数获取所有门票的数量。
编辑:
要进行额外排序,请使用子查询:
select t.*
from (select distinct on (userid) dateticket, timeticket, userid,
count(*) over (partition by userid) as my_all
from tickets t
order by userid, dateticket, timeticket
) t
order by my_all, dateticket, timeticket.