Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 69
1

Условие запроса отчетный год

30.11.2016, 12:14. Показов 1187. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Запрос нужен для отбора по отчетному году.
Отчетный год в моем случае это промежуток между 21 ноября прошлого года и текущего.
То есть 21.11.2015 - 21.11.2016
на данный момент (30.11.2016) отчетный год будет 21.11.206 - 21.11.2017

Пробовал так
SQL
1
2
3
SELECT Таблица1.год, Таблица1.дата
FROM Таблица1
WHERE (((Таблица1.дата) BETWEEN DateSerial(YEAR(DATE())-1,11,21) AND DateSerial(YEAR(DATE()),11,21)));
но оно (на данный момент (30.11.2016)) показывает прошлый год (21.11.2015 - 21.11.2016)
так понимаю из-за Year(Date())-1, а у нас пока еще 2016 и нормально этот запрос начнет работать только с 01.01.2017

Как написать запрос правильно ?
Вложения
Тип файла: 7z 1data.7z (19.4 Кб, 10 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2016, 12:14
Ответы с готовыми решениями:

Условие запроса
День добрый! Возникла следующая проблема: в одной строчке столбца (тип текстовый) таблицы хранится...

Условие запроса из MultiList'а
Доброго времени суток! Пытаюсь передать запросу условие из списка с несвязанным выделением. ...

Условие на выполнение запроса
Народ, я в access не очень разбираюсь, поэтому прошу не смеяться надо мной. Проблема такая: Есть,...

Условие на поле из запроса
Добрый вечер! Образовалась такая проблема! Созданная мною база ведёт учет счетов, договоров и...

16
8860 / 5908 / 585
Регистрация: 27.03.2013
Сообщений: 19,580
30.11.2016, 12:22 2
Цитата Сообщение от mansters Посмотреть сообщение
...Запрос нужен для отбора по отчетному году...
Что бы каждый раз не лазить в запрос и менять чиселки, предпочитаю в форме делать 2 поля или поля со списком - С и - По, где выбираю период не лазя во внутренности, а запрос ссылается на эти поля в условии отбора..
Выбрать можно любой период, хоть день, хот 5 лет (если за эти 5 лет есть данные) и всего за 2-3 сек.
Заодно ни чего и не сломаю нечаянно.
1
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
30.11.2016, 12:24 3
Текущий год:
SQL
1
WHERE YEAR(Таблица1.дата) = YEAR(DATE())
0
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 69
30.11.2016, 14:16  [ТС] 4
Цитата Сообщение от PuhKMV Посмотреть сообщение
Что бы каждый раз не лазить в запрос и менять чиселки
нужно чтобы аксес сам их менял относительно текущей даты.
Неужели нельзя написать в условии формулу которая будет осуществлять отбор по отчетному году? (не текущему, а именно отчетному, что такое отчетный год в первом посте)

Цитата Сообщение от ltv_1953 Посмотреть сообщение
Текущий год:
SQL
1
WHERE YEAR(Таблица1.дата) = YEAR(DATE())
это не то
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.11.2016, 14:36 5
SQL
1
WHERE  YEAR(Таблица1.дата) BETWEEN dateserial(YEAR(DATE()), 11, 21) AND dateserial(YEAR(DATE())+1, 11, 21)
0
10474 / 5459 / 1375
Регистрация: 05.10.2016
Сообщений: 15,480
30.11.2016, 14:40 6
Цитата Сообщение от mansters Посмотреть сообщение
не текущему, а именно отчетному, что такое отчетный год в первом посте
Там: "на данный момент (30.11.2016) отчетный год будет 21.11.206 - 21.11.2017"
Непонятно!!!
Перефразируйте задачку пожалуйста!

А пока:
T-SQL
1
WHERE (((Таблица1.дата) Between Date()-365 And Date()));
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.11.2016, 14:47 7
Неправильно написал, ошибся. Надо
SQL
1
WHERE  Таблица1.дата BETWEEN dateserial(YEAR(DATE()), 11, 21) AND dateserial(YEAR(DATE())+1, 11, 21)
Спасибо Eugene-LS, помог увидеть ошибку
0
10474 / 5459 / 1375
Регистрация: 05.10.2016
Сообщений: 15,480
30.11.2016, 14:55 8
Цитата Сообщение от mobile Посмотреть сообщение
Спасибо Eugene-LS, помог увидеть ошибку
спасибо, на добром слове. Я только пытался в задачку "воткнуться" ...
(чё-то работа сегодня не идёт)
0
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 69
30.11.2016, 16:43  [ТС] 9
Цитата Сообщение от mobile Посмотреть сообщение
SQL
1
WHERE Таблица1.дата BETWEEN dateserial(YEAR(DATE()), 11, 21) AND dateserial(YEAR(DATE())+1, 11, 21)
отчетный год 21.11.2016 - 21.11.2017

в 2016 этот запрос работает нормально
Условие запроса отчетный год



В 2017 году этот запрос начинает работать неправильно
Условие запроса отчетный год
0
10474 / 5459 / 1375
Регистрация: 05.10.2016
Сообщений: 15,480
30.11.2016, 17:02 10
Ну было же сказано вам: - Создайте форму с полями "ОТ" (Дата начала диапазона) и "ДО" (Дата конца диапазона) и кнопкой "Применить!"
Передавайте начальную и конечную даты из формы в запрос - и играйтесь хоть до опупения...

Успехов!
0
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 69
30.11.2016, 17:31  [ТС] 11
сейчас в условии запроса >=22.11.2016
1 раз в год это надо вручную менять

С формой вариант не очень, каждый раз когда идет обращение к запросу нужно даты вбивать на форме? или делать их там по умолчанию и также раз в год менять?
можно таблицу создать с полями от и до и также раз в год менять
это не варианты...
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
30.11.2016, 17:31 12
а почему IIF не примените? Как для вычисления возраста. Если Date > 21.11 то YEAR(DATE())+1 иначе YEAR(DATE())
0
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
30.11.2016, 17:37 13
Цитата Сообщение от mansters Посмотреть сообщение
это не варианты...
О_ГодОГ_СОГ_По
201521.11.201420.11.2015
201621.11.201520.11.2016
201721.11.201620.11.2017
201821.11.201720.11.2018
Как раз это самый удобный вариант, учитывая то, что отчеты могут потребоваться и за прошлые учетные года. По такой таблице можно текущий отчетный год определять и интервал для выборки по текущему отчетному году.
1
10474 / 5459 / 1375
Регистрация: 05.10.2016
Сообщений: 15,480
30.11.2016, 17:41 14
Цитата Сообщение от mansters Посмотреть сообщение
1 раз в год это надо вручную менять
А кто мешает к форме привязать отдельный запрос (который только РАЗ в ГОД)

Я нихрена не понимаю логику задачки ... старею...
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
30.11.2016, 17:43 15
Лучший ответ Сообщение было отмечено mansters как решение

Решение

SQL
1
2
3
4
5
SELECT Таблица1.год, Таблица1.дата
FROM Таблица1
WHERE (((Таблица1.дата) 
BETWEEN DateSerial(IIf(DATE()>DateSerial(YEAR(DATE()),11,21),YEAR(DATE()),YEAR(DATE())-1),11,21) 
AND DateSerial(IIf(DATE()>DateSerial(YEAR(DATE()),11,21),YEAR(DATE())+1,YEAR(DATE())),11,21)));
как-то так
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.11.2016, 18:12 16
Цитата Сообщение от mansters Посмотреть сообщение
В 2017 году этот запрос начинает работать неправильно
Присоединяюсь ко всему высказанному насчет формы. Тем не менее хотелось бы выяснить почему Вы считаете, что запрос неверный? Может быть он должен в течение всего отчетного периода выдавать одни и те же даты? И только когда дата перейдет за предел, изменить выборку? Тогда может быть подойдет такой запрос
SQL
1
2
3
SELECT Таблица1.год, Таблица1.дата
FROM Таблица1
WHERE Таблица1.дата BETWEEN DateSerial(YEAR(DATE()-325),11,21) AND DateSerial(YEAR(DATE()-325)+1,11,21)
1
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 69
30.11.2016, 18:34  [ТС] 17
corbis, Спасибо Все работает

ltv_1953, понял ваш способ, но в данном случае отчеты за прошлые года не нужны.
Тут даже отчета нет, запрос используется для подсчета текущей статистики...

Добавлено через 14 минут
Цитата Сообщение от mobile Посмотреть сообщение
SQL
1
2
3
SELECT Таблица1.год, Таблица1.дата 
FROM Таблица1 
WHERE Таблица1.дата BETWEEN DateSerial(YEAR(DATE()-325),11,21) AND DateSerial(YEAR(DATE()-325)+1,11,21)
Спасибо, работает
0
30.11.2016, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2016, 18:34
Помогаю со студенческими работами здесь

Условие отбора для запроса
Подскажите как создать условие отбора для запроса, по содержащемуся в поле слову. Если слово...

Ошибка выполнения запроса с условие WHERE . IN (SELECT .)
Есть у меня в базе данных 2 таблицы: Securities, где хранятся ценные бумаги, и tempEQE06, где...

Условие для запроса из подчиненной формы
Подскажите какой синтаксис для условия отбора в запросе из поля со списком в подчиненной форме

Написать условие для перекрестного запроса
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, описать условие для перекрестного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru