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。