Postgresql选择最小日期值
这些是我的桌子: 表格:门票Postgresql选择最小日期值,sql,postgresql,postgresql-9.3,dml,Sql,Postgresql,Postgresql 9.3,Dml,这些是我的桌子: 表格:门票 TID:序列号 userid:integer 日期票:日期 时间票:时间 表格:用户 userid:serial 用户名:varchar 密码:varchar 以下是我的数据: userid username password 1 user1 123 2 user2 123 ticketid userid dateticket timeticket 1
- TID:序列号
- userid:integer
- 日期票:日期
- 时间票:时间
- userid:serial
- 用户名: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
我想用userid和最短日期显示分配给用户的票证数量
我目前的查询是:
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
返回每组中的第一条记录,该记录基于排序依据
。诀窍是使用窗口函数获得所有票数
编辑:
对于其他排序,请使用子查询:
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.
你有一个疑问。然后呢?我需要的是显示与timeticket dateticket min相对应的值。@Ivan。您可以使用
distinct on
以最短的日期/时间提取所需的任何值。我选择的列是基于“预期结果是…”。是的。。。但我需要分类:我的全部,日期票,时间票。而不是通过:userid。