2015-06-11 4 views
0

Это мои таблицы:Postgresql выбрать минимальное значение даты

стол: билеты

  • TicketID: серийный
  • Идентификатор_пользователя: целое
  • dateticket: Дата
  • timeticket: время

стол: пользователи

  • Идентификатор_пользователя: серийный
  • Имя пользователя: 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 

Я хочу, чтобы показать сумма билета, назначенная пользователю с идентификатором пользователя и минимальной датой с е время.

Мой текущий запрос:

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 
+1

У вас есть запрос. и что? – mhs

ответ

0

Я думаю, что это будет делать то, что вы хотите:

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 возвращает первую запись в каждой группе, на основе order by. Фокус в том, чтобы получить счет всех билетов, используя функцию окна.

EDIT:

Для дополнительного вида используйте подзапрос:

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. 
+0

Мне нужно показать значение, соответствующее timeticket dateticket min. – ivanjj22

+0

@Ivan. , , Вы можете вытащить любые значения, которые вы хотите, с минимальной датой/временем, используя 'distinct on'. Мой выбор столбцов основан на «Ожидаемый результат ...». –

+0

Да ... но мне нужно отсортировать по: my_all, dateticket, timeticket. а не: userid. – ivanjj22

 Смежные вопросы

  • Нет связанных вопросов^_^