Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Выборка первой и последней записи за день


Автор: Spirit_FTZI2 28.10.2007, 19:36
Всем привет!

А кто поможет справится с очередной проблемой?  smile 
Есть таблица:
=========================
ID  | Name |         date      |   time
=========================
1    | sergey | 16.10.2007 | 09:00:00
1    | sergey | 16.10.2007 | 09:12:00
1    | sergey | 16.10.2007 | 21:00:00
2    | denis   | 16.10.2007 | 12:00:00
2    | denis   | 16.10.2007 | 11:12:00
2    | denis   | 16.10.2007 | 18:00:00
1    | sergey | 17.10.2007 | 07:00:00
1    | sergey | 17.10.2007 | 09:56:00
1    | sergey | 17.10.2007 | 13:00:00
2    | denis   | 17.10.2007 | 12:41:00
2    | denis   | 17.10.2007 | 15:11:00
2    | denis   | 17.10.2007 | 18:47:00

То есть у нас таблица с логом посещений. Нужно получить за каждое число по каждому человеку первое и последнее посещение за сутки или хотябы вычислить первое и последнее посещение за конкретную дату... 

Можно ли получить чтото вроди этого:
1    | sergey | 16.10.2007 | 09:00:00 | 21:00:00
2    | denis   | 16.10.2007 | 12:00:00 | 18:00:00
1    | sergey | 17.10.2007 | 07:00:00 | 13:00:00
2    | denis   | 17.10.2007 | 12:41:00 | 18:47:00

Спасибо всем, кто откликнется!

Автор: Deniz 29.10.2007, 06:39
Неплохо бы указать СУБД и типы полей.
Чтобы посчитать все это за период времени, нужно дату и время совокупить в одно поле.
Предположим что date и time не строковые поля, тогда за конкретную дату:
Код

select name, min(time), max(time) from table where date = <нужная дата> group by name

после того, как сделаешь поле с датой и временем немного подправь данный запрос.

Автор: Spirit_FTZI2 29.10.2007, 18:02
через ADO компоненты конекчусь к SQL server.
Типы полей в принципе роли не играют, дата - datetime, время - строковое. Но ничего, время можно перевести в datetime (что я и делаю)... 

Спасибо за дату, а вот если нужно в одном запросе за несколько дат???

Автор: Deniz 30.10.2007, 06:39
Цитата(Spirit_FTZI2 @  29.10.2007,  21:02 Найти цитируемый пост)
Типы полей в принципе роли не играют
Как раз таки играют.

Сделаешь
Цитата(Deniz @  29.10.2007,  09:39 Найти цитируемый пост)
... нужно дату и время совокупить в одно поле.

Код

select
  t.Name,
  DAY(t.Date) as Day_Date,
  MONTH(t.Date) as Month_Date,
  YEAR(t.Date) as Year_Date,
  min(t.Date) as Min_DateTime,
  max(t.Date) as Max_DateTime
from Table t
where t.Date between <начало периода> and <конец периода>
group by t.Name, YEAR(t.Date), MONTH(t.Date), DAY(t.Date)
order by YEAR(t.Date), MONTH(t.Date), DAY(t.Date), t.Name

+ в помощь F1 DatePart

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)