
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.08.2013, 00:41:42
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
Всем привет! Помогите составить запрос. Допустим есть таблица: -id (int, PK) -service_id (int) -payment_date (timestamp) дата платежа - days (int) - кол-во оплаченых дней - amount - сумма В таблицу записываются платежи за использование сервиса. Пользователь может не дожидаясь окончания продлить подписку, сделав платеж. Как составить запрос, который бы показывал может ли пользователь пользоваться сервисом на текущий момент? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 06:07:58
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
question1_111111, ну, если предположить, что в таблице есть поле userid, показывающее, кто же всё-таки заплатил ту или иную сумму , то Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 06:08:35
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
фильтр по сервис_ид забыл, ну да это уж и сами допишете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 08:55:32
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
tanglir , думаю, всё гораздо сложнее и хуже... Представь, что неделю назад я оплатил 5 дней, и 6 дней назад ещё 5 дней... сегодня мне сервис должен быть доступен... И даже ещё хуже... чтобы убедиться, что суммировать надо именно от первого из этих двух платежей, надо поднимать всю историю и считать накопление. Вдруг где были разрывы - не было оплачено и не предоставлялось? это тоже надо учесть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 09:34:48
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
Да в поле есть user_id разумеется. )) и конечно же могут быть разрыва в платежах. У меня есть идея, не знаю как это оформить в виде запроса. Нужно ввести вычисляемую переменную "период оплаты" (ПО) , для самого первого платежа ПО = payment_date + days , для второго платежа - если payment_date < ПО , то ПО = ПО + days, иначе ПО = payment_date + days. В итоге если ПО больше текущей даты, то сервис доступен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 10:07:38
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
question1_111111У меня есть идея, не знаю как это оформить в виде запроса. Лучше оформите в виде пользовательской функции. Принимаете ID юзера, отдаёте признак доступности. Внутри курсор, выполняющий описанный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 13:25:57
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
AkinaВдруг где были разрывы - не было оплачено и не предоставлялось? это тоже надо учесть...Да, про разрывы я забыл. Но их длительность можно посчитать отдельным запросом на переменных и тем самым свести задачу к решённой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 15:20:56
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
tanglirих длительность можно посчитатьДа не надо считать их длительность! надо просто найти ту дату, ранее которой все записи следует просто игнорировать. И к решённой, увы, это ни разу не сводится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 15:52:49
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
сомневаюсь, что "это" можно использовать в "боевой ситуации" :), но всё-таки - "работает" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. @t idservice_iduser_idpayment_datedays1112013-01-01 00:00:00.000102112013-01-02 00:00:00.00013112013-01-05 00:00:00.00014112013-01-20 00:00:00.000105112013-05-01 00:00:00.00016112013-05-02 00:00:00.00027112013-05-10 00:00:00.00010 result service_iduser_idpayment_datedays112013-01-01 00:00:00.00012112013-01-20 00:00:00.00010112013-05-01 00:00:00.0003112013-05-10 00:00:00.00010 и проверка сводится к Код: sql 1. зы на МС СКЛ, сори ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 16:35:37
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
концепт-идея, с датами в виде целых чисел, чтоб не заморачиваться:) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. id paydate payed_daysdate_begindate_end1120121225202545330546514362052725401073836903090120 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 19:24:55
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
question1_111111Как составить запрос, который бы показывал может ли пользователь пользоваться сервисом на текущий момент?Уточните, вопрос про конкретно сегодняшнюю календарную дату, или про абстрактную дату построения отчета? Если речь именно про «сегодня», то в таблице данных пользователя нужно поле «дата прекращения предоставления услуги», а каждый платеж (триггером, или хранимой процедурой, или простым запросом, не суть) должен сдвигать эту дату на количество оплаченных дней. Тогда ответ на вопрос – элементарный поиск по ключу даты и сравнение ее с текущей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 19:52:44
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
Cygapb-007 Если речь именно про «сегодня», то в таблице данных пользователя нужно поле «дата прекращения предоставления услуги», а каждый платеж (триггером, или хранимой процедурой, или простым запросом, не суть) должен сдвигать эту дату на количество оплаченных дней. Тогда ответ на вопрос – элементарный поиск по ключу даты и сравнение ее с текущей. На текущую дату. Я согласен с вашей идеей, это наиболее простой и быстрый способ решения задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 20:46:12
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
Akina, разумная мысля. Почему её не развить "дальше"? А именно: добавить это как вычисляемое поле в таблицу... дата до которой всё УЖЕ оплачено... нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 20:47:20
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
Arhat109, упс... уже обсудили, не видел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.08.2013, 22:25:56
|
|||
|---|---|---|---|
Помогите составить запрос |
|||
|
#18+
Arhat109Почему её не развить "дальше"?Я не знаю отношения ТС к переопределённым данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.08.2013, 02:03:46
|
|||
|---|---|---|---|
|
|||
Помогите составить запрос |
|||
|
#18+
получилось такое решение 1. Создал ф-ю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 2. сам запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. как-то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1836252]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
80ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 389ms |

| 0 / 0 |
