Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2015, 08:48   #1
Arsenal2
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию количества обращений

Помогите выполнить запросс

количества обращений Клиентов за один день до дня рождения, в день рождения, один день после дня рождения за период с 1.07.2014 года по 18.01.2015 года
Arsenal2 вне форума Ответить с цитированием
Старый 20.01.2015, 09:20   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сколько дней до (после) дня рожденя?
На примере MS SQL.
Допустим есть date1 - дата рождения и date2 - с этой датой сравнение
Код:
DATEDIFF(day,DATEADD(Year,1900-YEAR(date1),date1),DATEADD(Year,1900-YEAR(date2),date2))
=-1 - date2 за день дня рождения
=0 - date2 в день рождения
=1 - date2 на следующий день после дня рождения

от этого и пляши в запросе, приспособив к своей СУБД

ADD

лучше пожалуй формулу так сделать
Код:
DATEDIFF(day,DATEADD(Year,YEAR(date2)-YEAR(date1),date1),date2)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.01.2015 в 09:37.
Аватар вне форума Ответить с цитированием
Старый 20.01.2015, 09:49   #3
Arsenal2
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

с 1.07.2014 года по 18.01.2015 года

мне получается каждый день перебирать придётся?
Arsenal2 вне форума Ответить с цитированием
Старый 20.01.2015, 09:58   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем? Есть дата обращения - вот на неё условие попадания в заданный интервал + она же сравнивается с датой рождения по выше приведенной формуле
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2015, 10:14   #5
Arsenal2
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

Select * from Dogovor d
Left join Clients cl on cl.ID=d.ID_CLIENT
where DATEDIFF(day,DATEADD(Year,YEAR(2015 )-YEAR(cl.D_BD),cl.D_BD),-1)

Последний раз редактировалось Arsenal2; 20.01.2015 в 10:24.
Arsenal2 вне форума Ответить с цитированием
Старый 20.01.2015, 10:29   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Как-то в этом направлении
Код:
SELECT
    SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(DateObr)-YEAR(DateBirth),DateBirth),DateObr)=-1 THEN 1 ELSE 0 END) AS [За день],
    SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(DateObr)-YEAR(DateBirth),DateBirth),DateObr)=0 THEN 1 ELSE 0 END) AS [В день],
    SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(DateObr)-YEAR(DateBirth),DateBirth),DateObr)=1 THEN 1 ELSE 0 END) AS [На следующий день]
  FROM MyTable
  WHERE DateObr BETWEEN '20140701' AND '20150118'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2015, 10:36   #7
Arsenal2
Пользователь
 
Регистрация: 01.10.2014
Сообщений: 11
По умолчанию

как то так. Правильно?

SELECT
SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(Dogo vor.D_DATEINPUT)-YEAR(Clients.D_BD),Clients.D_BD),Do govor.D_DATEINPUT)=-1 THEN 1 ELSE 0 END) AS [За день],
SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(Dogo vor.D_DATEINPUT)-YEAR(Clients.D_BD),Clients.D_BD),Do govor.D_DATEINPUT)=0 THEN 1 ELSE 0 END) AS [В день],
SUM(CASE WHEN DATEDIFF(day,DATEADD(Year,YEAR(Dogo vor.D_DATEINPUT)-YEAR(Clients.D_BD),Clients.D_BD),Do govor.D_DATEINPUT)=1 THEN 1 ELSE 0 END) AS [На следующий день]
FROM Clients
Left join Dogovor on Dogovor.ID_CLIENT=Clients.ID
WHERE Dogovor.D_DATEINPUT BETWEEN '20140701' AND '20150118'
Arsenal2 вне форума Ответить с цитированием
Старый 20.01.2015, 10:38   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык выполните запрос, результат и скажет правильно или нет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
много обращений к базе Shyt SQL, базы данных 6 27.03.2014 17:34
Отслеживание обращений к файлу или папке (C++) Аня_Ф Помощь студентам 6 02.10.2012 21:05
Перехват обращений к реестру Fedor666 Win Api 2 17.10.2011 18:44
Клиент-серверная прога с подсчетом обращений usserrr БД в Delphi 1 12.05.2011 16:30