Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
alexander.zas
Member

Откуда:
Сообщений: 2
BETWEEN '2015-03-01 00:00:00' AND '2015-03-31 23:59:59'

В конечном итоге я получаю столбец за один месяц (в данном примере март)
2015-03-02 09:07:26.000
2015-03-02 13:15:38.000
2015-03-02 13:20:36.000
2015-03-02 16:31:48.000
2015-03-02 16:36:20.000
2015-03-02 18:09:28.000
2015-03-03 09:12:20.000
2015-03-03 11:01:30.000
2015-03-03 11:05:29.000
2015-03-03 15:21:26.000
2015-03-03 15:25:47.000
2015-03-03 16:41:00.000
2015-03-03 16:41:26.000
2015-03-03 16:42:17.000
2015-03-03 16:46:26.000

Как мне оставить только первое и последнее значение каждого дня?
Т.е. у меня до 40 событий в день может быть и так целый месяц, и мне нужно только первое и последнее событие в разрезе дня.

Спасибо, буду весь благодарен.
2 апр 15, 14:02    [17464311]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexander.zas
BETWEEN '2015-03-01 00:00:00' AND '2015-03-31 23:59:59'
Говнокод.
Надо так:
DateTimeField>='20150301' AND DateTimeField<'20150401'
Версию сервера надо угадать?
2 апр 15, 14:10    [17464364]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
alexander.zas
Member

Откуда:
Сообщений: 2
Сорри SQL Server 2008 R2

Код пофиг, роли тут не играет, запрос маленький, я получаю всю таблицу за месяц, вот только мне нужно в этой таблице оставить только первую и последнюю запись каждого дня.
2 апр 15, 14:17    [17464402]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
WITH CTE AS
(
SELECT '2015-03-02 09:07:26.000' AS X
UNION ALL
SELECT '2015-03-02 13:15:38.000'
UNION ALL
SELECT '2015-03-02 13:20:36.000'
UNION ALL

SELECT '2015-03-02 16:31:48.000'
UNION ALL
SELECT '2015-03-02 16:36:20.000'
UNION ALL
SELECT '2015-03-02 18:09:28.000'
UNION ALL
SELECT '2015-03-03 09:12:20.000'
UNION ALL
SELECT '2015-03-03 11:01:30.000'
UNION ALL
SELECT '2015-03-03 11:05:29.000'

)
SELECT MIN(X),MAX(X),CAST(X AS DATE)
FROM CTE X
GROUP BY CAST(X AS DATE)
2 апр 15, 14:23    [17464446]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY
 NULLIF(ROW_NUMBER()OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField DESC),1)
+NULLIF(ROW_NUMBER()OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField),1);
???
2 апр 15, 14:32    [17464505]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
aleks2
Guest
iap
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY
 NULLIF(ROW_NUMBER()OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField DESC),1)
+NULLIF(ROW_NUMBER()OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField),1);
???

Издеваешься, да?

SELECT  *
FROM T
WHERE
    ROW_NUMBER() OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField DESC) = 1
    or 
    ROW_NUMBER() OVER(PARTITION BY CAST(DateTimeField AS DATE) ORDER BY DateTimeField) =  1;
3 апр 15, 05:16    [17467231]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
кролик-зануда
Guest
aleks2,
а что, стало можно оконные функции в where указывать?
3 апр 15, 07:53    [17467331]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
aleks2,

подзапрос городить тогда надо.
3 апр 15, 08:48    [17467463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить