Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
самосоединение по дате - в чем ошибка ?
|
|||
|---|---|---|---|
|
#18+
Имеется таблица с полем datetime, куда заносится время входа пользователей в систему. Нужно вычислить количество входов (т.е. записей) за равные промежутки в днях [t0,t1][t1,t2]..[t(n-1),t(n)]. Например, сколько было входов за каждые 7 дней 6-го месяца 2001 года? Придумал такое самосоединение (видел где-то аналогичное, но там вычисляли running total): select convert(char(10),a.aDate,102), min(b.aDate) as FromDate, max(b.aDate) as ToDate, count(b.aDate) as Qty from EnterLog as a inner join EnterLog as b on (b.aDate >= a.aDate and b.aDate < dateadd(dd,7,a.aDate)) where (a.aDate between '20010601' and '20010701') and (datediff(dd,'20000101',a.aDate) % 30 = 0) group by convert(char(10),a.aDate,102) order by 1 Выдает полную ахинею (Qty превышает кол-во записей в таблице) В чем ошибка, народ ? Помогите, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2002, 19:39 |
|
||
|
самосоединение по дате - в чем ошибка ?
|
|||
|---|---|---|---|
|
#18+
Выдает полную ахинею (Qty превышает кол-во записей в таблице) Еще бы не ахинею. "Размножили" с помощью EnterLog as a inner join EnterLog as b on (b.aDate >= a.aDate and b.aDate < dateadd(dd,7,a.aDate)) записи, вот их получилось больше, чем за надо IMHO что-то вроде такого select (day(a.aDate)-1)/7, min(b.aDate) as FromDate, max(b.aDate) as ToDate, count(*) as Qty from EnterLog as a where (a.aDate between '20010601' and '20010630 23:59:59') and (datediff(dd,'20000101',a.aDate) % 30 = 0) group by (day(a.aDate)-1)/7 order by 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2002, 20:19 |
|
||
|
самосоединение по дате - в чем ошибка ?
|
|||
|---|---|---|---|
|
#18+
А у меня вот что используется для такой цели DECLARE @Period tinyint, @StartDate smalldatetime, @StopDate smalldatetime SET @Period = 7 SET @StartDate = '20010601' SET @StopDate = '20010701' SELECT COUNT(*) AS QTY, CONVERT(smalldatetime, FLOOR((FLOOR(CONVERT(float, aDate)) - FLOOR(CONVERT(float, @StartDate))) / CONVERT(float, @Period)) * @Period + FLOOR(CONVERT float, @StartDate))) AS FromDate, CONVERT(smalldatetime, FLOOR((FLOOR(CONVERT(float, aDate)) - FLOOR(CONVERT(float, @StartDate))) / CONVERT(float, @Period)) * @Period + @Period + FLOOR(CONVERT(float, @StartDate))) AS ToDate FROM EnterLog WHERE aDate >= @StartDate AND aDate < @StopDate GROUP BY CONVERT(smalldatetime, FLOOR((FLOOR(CONVERT(float, aDate)) - FLOOR(CONVERT(float, @StartDate))) / CONVERT(float, @Period)) * @Period + FLOOR(CONVERT(float, @StartDate))), CONVERT(smalldatetime, FLOOR((FLOOR(CONVERT(float, aDate)) - FLOOR(CONVERT(float, @StartDate))) / CONVERT(float, @Period)) * @Period + @Period + FLOOR(CONVERT(float, @StartDate))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2002, 03:09 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32023973&tid=1823750]: |
0ms |
get settings: |
9ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 431ms |

| 0 / 0 |
