Выборка по дате
Интересует такой вопрос. Как сделать выборку данных по дате?
на пример что было неделю назад если отталкиваться от сегодня
что было в прошлом месяце (т.е. например сегодня февраль, а надо узнать что было в январе)
и что происходило в этом месяце (с начала по сегодняшнее число)
ну или просто где это почитать?
да, гугл забанил)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Выборка по дате
Есть 2 столбца: Номер телефона, Дата разговора. Необходимо вывести абонентов, которые не.
Выборка по дате
Подскажите кто-нибудь, как правильно написать запрос? требуется вывести записи с критерием по дате.
Выборка по дате и времени
SELECT dbo.TestCS.idTestCS, dbo.TestCS.NoOrder, dbo.Customer.Name as Customer.
Выборка по дате, не затрагивая время
Здравствуйте! Такой вопрос: в таблице есть поле типа smalldatetime. Мне нужно сделать выборку по.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Что было в январе?
WHERE DateField >= '20180101' AND DateField '20180201'
Главное — стараться накладывать ограничение на поле, а не на функцию от поля. Иначе нельзя будет использовать индекс.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
Так datediff детерминированная же. В чем подвох с использованием индексов?
Регистрация: 27.11.2014
Сообщений: 263
iap, искал по вашему примеру то что было только в феврале
результат — ничего
1 2 3 4 5 6 7 8
SELECT Dohod.UsersID ,SUM(Dohod.KolichestvoSredstv) AS expr1 FROM dbo.Dohod WHERE Dohod.UsersID = 1 AND Dohod.Var_Scheta = 1 AND Dohod.Date ! 01022018 GROUP BY Dohod.UsersID
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
Сообщение от 19boom96 
искал по вашему примеру то что было только в феврале
результат — ничего
SQLВыделить код
1
2
3
4
5
6
7
8
SELECT
* Dohod.UsersID
*,SUM(Dohod.KolichestvoSredstv) AS expr1
FROM dbo.Dohod
WHERE Dohod.UsersID = 1
AND Dohod.Var_Scheta = 1
AND Dohod.Date ! < 01022018
GROUP BY Dohod.UsersID
Целое число 01022018 конвертируется в дату ‘11.03.4698’. В вашей таблице есть данные, которые не меньше этой даты? Дату писать нужно так ‘20180201’. Ну или так ‘01.02.2018’
Сообщение от pincet 
Так datediff детерминированная же. В чем подвох с использованием индексов?
В том, что при такой записи:
1 2 3
SELECT * FROM MyTable WHERE DATEDIFF(MONTH, CURRENT_TIMESTAMP, MyDate) = -1
Будет происходит полное сканирование индекса, так как для проверки условия нужно вычислить значение функции DATEDIFF для каждого значения MyDate в таблице.
А при такой записи:
1 2 3 4
SELECT * FROM MyTable WHERE MyDate >= DATEADD(MONTH, -1, CONVERT(DATETIME, CONVERT(CHAR(6), CURRENT_TIMESTAMP, 112) + '01')) AND MyDate CONVERT(DATETIME, CONVERT(CHAR(6), CURRENT_TIMESTAMP, 112) + '01')
Будет происходить поиск в индексе.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Выборка по дате из поля DateTime
Здравствуйте. Есть таблица с полем DateTime. Мне необходимо получить количество записей в которых.
Выборка строк с сортировкой по дате
Всем доброго времени суток. Подскажите один маленький момент: есть запрос на выбор строк из.
Выборка по заданной дате и времени
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, решить задачу: Есть таблица со столбцом.
Выборка по дате
Добрый день! Для того, что бы выбрать необходимую мне дату пишу условие "where date =.

Выборка по дате
Как сделать выборку: | | Отчетный | Отчетный | Тип | Дата | | № | .
Выборка по дате
Здравствуйте! Есть итоговая таблица: номер1 25.10.2016 11:36:10 номер2 25.10.2016 15:14:32 .
выборка актуальных по дате данных
Имеется табличка, в которой тип группы меняется с течением времени:
select * from user_groups_by_types ; id | change_date | user_group | group_type ----+-------------+------------+------------ 1 | 2022-05-01 | A | type1 2 | 2022-05-05 | A | type2 3 | 2022-05-06 | B | type1
Требуется выбрать для каждой группы актуальный тип (т.е. самый последний по дате тип). Решение для одной конкретной группы очевидно. Как это обобщить на все группы?
select * from user_groups_by_types where user_group = 'A' and change_date = (select max(change_date) from user_groups_by_types where user_group = 'A'); id | change_date | user_group | group_type ----+-------------+------------+------------ 2 | 2022-05-05 | A | type2
scisearcher
30.05.22 13:18:41 MSK
- Ответить на это сообщение
- Ссылка

select distinct on (user_group) * from user_groups_by_types order by user_group, change_date desc;
theNamelessOne ★★★★★
( 30.05.22 13:48:55 MSK )
Последнее исправление: theNamelessOne 30.05.22 13:49:09 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
У вас структура говна, ибо из конкретной записи не возможно узнать дату когда тип станет неактуальным.
По-нормальному делаются 2 даты — начальная и конечная. В таком случае всё выбирается банальным between, да и вообще, это удобнее в большинстве других кейсов.
crutch_master ★★★★★
( 30.05.22 17:32:10 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от crutch_master 30.05.22 17:32:10 MSK
структура мне дана и менять ее нельзя, к сожалению
scisearcher
( 30.05.22 17:53:59 MSK ) автор топика
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от theNamelessOne 30.05.22 13:48:55 MSK
scisearcher
( 30.05.22 17:54:45 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от scisearcher 30.05.22 17:53:59 MSK
структура мне дана и менять ее нельзя, к сожалению
Печально. Но если было бы можно приделать таблицу сбоку я бы приделал. А так изъёжам не будет конца.
crutch_master ★★★★★
( 30.05.22 17:55:39 MSK )
Последнее исправление: crutch_master 30.05.22 17:56:56 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от scisearcher 30.05.22 17:53:59 MSK
Значит надо приводить к нормальному виду и добавлять недостающие данные заджоинив таблицу саму с собой по следующей-предыдущей записи, что то еще удовольствие.
Хотя в конкретном случае можно просто приджоинить
select max(change_date) from user_groups_by_types group by user_group
по этой самой user_group и стравнить по change_date.
crutch_master ★★★★★
( 30.05.22 17:58:33 MSK )
Последнее исправление: crutch_master 30.05.22 18:01:20 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от crutch_master 30.05.22 17:58:33 MSK
Спасибо за идею. Кстати, можно проще. Добавить столбец is_active и при назначении нового типа заполнять этот столбец в 1-й или 2-х записях. Хотя start_date и end_date более универсально. Но, править БД незя, c distinct group by выкрутился )
scisearcher
( 30.05.22 18:16:18 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
21 октября 2022 г.

Во-первых решение для одной группы есть и лучше — без подзапроса:
SELECT * FROM user_groups_by_types WHERE user_group='A' ORDER BY change_date DESC LIMIT 1

Во-вторых для всех групп оно тоже очевидное, но не слишком быстрое и читаемое (которое предложил crutch_master ):
SELECT t1.id, t1.change_date, t1.user_group, t1.group_type FROM user_groups_by_types t1 INNER JOIN (SELECT MAX(change_date) AS max_date, user_group FROM user_groups_by_types GROUP BY user_group) t2 ON t1.change_date=t2.max_date AND t1.user_group=t2.user_group
Чтобы сделать хорошо, можно сделать так (но для этого придется поменять структуру):
Добавить в таблицу булев столбец is_current
SELECT * FROM user_groups_by_types WHERE is_current=TRUE
Вообще это гуглится slowly changing dimension.
damix9 ★★★
( 21.10.22 00:01:47 MSK )
- Ответить на это сообщение
- Ссылка
SQL выборка по дате?

Выводит:
Но вот вопрос, можно, что бы sql подставил сам даты, которых не хватает, то есть
2018-12-14
2018-12-15
2018-12-16
и до
2018-12-23
Или нужно ему подставить даты
SELECT * FROM `table_user` WHERE U_ID = 2 and date_format(DATE_CREATE, '%Y%m') in ('2018-12-23','2018-12-22' и тд)
ТО есть, подставить я и сам могу, вопрос может ли это сделать mySQL?
- Вопрос задан более трёх лет назад
- 4535 просмотров
Как сделать sql select по дате?
Не сработало.
Как можно сделать селект по дате?
- Вопрос задан более трёх лет назад
- 6879 просмотров
Комментировать
Решения вопроса 1

Константин Цветков @tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
SELECT COUNT(*) FROM [Table] WHERE CAST( UpdateDate AS DATE) = '20200606'