|
|
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
У меня задача показать пользователю статистику прибыли сгруппированную по неделям (последние 7 недель например). Есть такая таблица profit id | user_id | date | profit 1 1 2009-06-01 100.55 2 1 2009-06-03 110.55 3 1 2009-06-04 120.55 4 1 2009-06-07 140.55 ... 5 1 2009-06-12 130.55 6 1 2009-06-13 150.55 7 1 2009-06-14 105.55 В итоге должны получить что то типа 2009-06-01 по 2009-06-07 472$ Еще заморочка в том, что надо все делать относительно дней недели т.е. считать начиная с воскресенья за неделю (в примере выше 2009-06-01 - воскресенье), диапазон дат мне надо выводить. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 16:33:01 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
Подробнее про то, какой результат хочу получить На данный момент при группировки по дате у меня получаются такие данные 2009-08-08 150.0000 2009-08-07 100.0000 2009-06-18 1127.1973 2009-06-17 761.8159 2009-06-16 1061.7598 2009-06-15 1396.4341 2009-06-14 7452.1342 2009-06-13 629.0677 2009-06-12 466.9909 2009-06-11 1336.4949 2009-06-10 1770.0211 2009-06-07 4202.5746 2009-06-01 10509.7444 За пример возьмем дату 2009-06-01. Если посмотреть календарь то день недели среда. На выходе я должен пользователю отобразить 2009-06-01 до 2009-06-05 | 10509.7444 2009-06-05 до 2009-06-12 | 4202.5746 + 1770.0211 + 1336.4949 + 466.9909 Вот как то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 16:56:08 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
progi2007, Group By Week(mytable.date), нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 17:54:16 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
tanglirprogi2007, Group By Week(mytable.date), нет? Да пробовал но результат вроде не тот.. Написал запрос SELECT DAYOFWEEK( d_date ) , iF( DAYOFWEEK( d_date ) =1, ADDDATE( d_date, INTERVAL 1 DAY ) , d_date ) AS startInt, ADDDATE( d_date, INTERVAL( 7 - DAYOFWEEK( d_date ) +1 ) DAY ) AS endInt, SUM( profit ) FROM `stat_profit` GROUP BY d_date ORDER BY d_date DESC Получил почти нужный мне результат DAYOFWEEK(d_date) startInt endInt SUM(profit) 7 2009-08-08 2009-08-09 150.0000 6 2009-08-07 2009-08-09 100.0000 5 2009-06-18 2009-06-21 1063.5653 4 2009-06-17 2009-06-21 761.8159 3 2009-06-16 2009-06-21 1061.7598 2 2009-06-15 2009-06-21 1396.4341 1 2009-06-15 2009-06-21 7452.1342 7 2009-06-13 2009-06-14 629.0677 6 2009-06-12 2009-06-14 466.9909 5 2009-06-11 2009-06-14 1336.4949 4 2009-06-10 2009-06-14 1770.0211 1 2009-06-08 2009-06-14 4202.5746 2 2009-06-01 2009-06-07 10509.7444 Теперь надо как то сгрупировать по интервалам т.е. 2009-06-13, 2009-06-12, 2009-06-11, 2009-06-10 попадает в интервал 2009-06-08 2009-06-14 шаманю-шаманю но толка пока нет Если сделать группировку Group By Week(mytable.date) Получаю такой результат DAYOFWEEK(d_date) startInt endInt SUM(profit) 6 2009-08-07 2009-08-09 250.0000 3 2009-06-16 2009-06-21 11735.7093 4 2009-06-10 2009-06-14 8405.1491 2 2009-06-01 2009-06-07 10509.7444 Вроде и верно, я тоже хочу 4 недели получить, но периоды не такие какие мне надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 18:16:25 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
progi2007, не dayofweek, а просто week. По первому примеру Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 18:44:01 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
tanglirprogi2007, не dayofweek, а просто week. По первому примеру Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. Спасибо Вам за помощь, вроде где то близко но есть неточности... Вот мой результат nedelya dbeg dend sumprf 31 2009-08-02 2009-08-08 250.0000 24 2009-06-14 2009-06-20 11799.3413 23 2009-06-07 2009-06-13 8405.1491 22 2009-05-31 2009-06-06 10509.7444 Отсортировал я их по dbeg DESC 22 2009-05-31 2009-06-06 10509.7444 Куда то пошли в обратную сторону, мне нужно получить неделю от текущего числа т.е. должно быть 2009-06-01 2009-06-07 дальше 23 2009-06-07 2009-06-13 8405.1491 должна привратится в 23 2009-06-08 2009-06-14 8405.1491 т.е. начинаем с понедельника так как закончили на воскресенье. 24 2009-06-14 2009-06-20 11799.3413 - эта привращается в 2009-06-15 2009-06-21 7452.1342 а последняя строка должна превратиться в 2009-08-07 2009-08-09 P.S я начал с конца анализ. Суммы все совпадают а вот интервалы нет. Буду благодарен если поможете добить скрипт. Мне редко приходится писать, что то сложное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 19:03:50 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
progi2007, Во-первых, в моём предыдущем варианте были и иные косяки (которые заметил я уже сам ). В-остальных... У Вас было В итоге должны получить что то типа 2009-06-01 по 2009-06-07 472$ <...> т.е. считать начиная с воскресенья за неделю (в примере выше 2009-06-01 - воскресенье)Я понял, что надо начинать считать с воскресенья, а выходит, что с понедельника? Вы всё-таки определитесь, откуда недели считать, потому что если с понедельника, то по первому примеру выходит 2 недели, а если с воскресенья - то 3. А если ещё и тут прочитать, то вообще засада - там вообще о пятнице речь идёт, причём она входит в оба интервала: 2009-06-01 до 2009-06-05 | 10509.7444 2009-06-05 до 2009-06-12 | 4202.5746 + 1770.0211 + 1336.4949 + 466.9909 Ещё а последняя строка должна превратиться в 2009-08-07 2009-08-09 Если dbeg desc, то это будет первая строка. И кроме "превращения" в 2009-08-03 | 2009-08-09 ничего не придумывается. PS. Если всё же понедельник (обратите внимание на цифирь 1 в функции week): Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2009, 20:20:01 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
tanglirprogi2007, Во-первых, в моём предыдущем варианте были и иные косяки (которые заметил я уже сам ). В-остальных... У Вас было В итоге должны получить что то типа 2009-06-01 по 2009-06-07 472$ <...> т.е. считать начиная с воскресенья за неделю (в примере выше 2009-06-01 - воскресенье)Я понял, что надо начинать считать с воскресенья, а выходит, что с понедельника? Вы всё-таки определитесь, откуда недели считать, потому что если с понедельника, то по первому примеру выходит 2 недели, а если с воскресенья - то 3. А если ещё и тут прочитать, то вообще засада - там вообще о пятнице речь идёт, причём она входит в оба интервала: 2009-06-01 до 2009-06-05 | 10509.7444 2009-06-05 до 2009-06-12 | 4202.5746 + 1770.0211 + 1336.4949 + 466.9909 Ещё а последняя строка должна превратиться в 2009-08-07 2009-08-09 Если dbeg desc, то это будет первая строка. И кроме "превращения" в 2009-08-03 | 2009-08-09 ничего не придумывается. PS. Если всё же понедельник (обратите внимание на цифирь 1 в функции week): Код: plaintext 1. 2. 3. 4. 5. 6. Спасибо Вам большое за помощь. Запрос отработал верно и вернул правильный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2009, 11:04:12 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
авторЯ понял, что надо начинать считать с воскресенья, а выходит, что с понедельника? Вы всё-таки определитесь, откуда недели считать, потому что если с понедельника, то по первому примеру выходит 2 недели, а если с воскресенья - то 3. А если ещё и тут прочитать, то вообще засада - там вообще о пятнице речь идёт, причём она входит в оба интервала: Ну как бы с понедельника по воскресенье, меня самого немного ввели в заблуждение так как таблица не моя. С интервалом я действительно намудрил, меня потом поправили (в примерах того Ю,что получалось у меня я это исправил) Еще раз спасибо за помощь и терпение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2009, 11:08:01 |
|
||
|
Выбрать данные с группировкой по неделям.
|
|||
|---|---|---|---|
|
#18+
Спасибо progi2007 progi2007Написал запрос SELECT DAYOFWEEK( d_date ) , iF( DAYOFWEEK( d_date ) =1, ADDDATE( d_date, INTERVAL 1 DAY ) , d_date ) AS startInt, ADDDATE( d_date, INTERVAL( 7 - DAYOFWEEK( d_date ) +1 ) DAY ) AS endInt, SUM( profit ) FROM `stat_profit` GROUP BY d_date ORDER BY d_date DESC То, что мне нужно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2015, 09:57:38 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=36133169&tid=1833069]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 342ms |

| 0 / 0 |
