Как в sql сделать выборку по дате

Как сделать выборку из базы данных каждого одного значения по максимальной дате

Как мне сделать SQL запрос, чтобы он мне выдал по одному из значений Cycle по максимальной дате и чтобы я получил такой ответ:

Обязательно, чтобы были все данные из ячейки Cycle, как в примере выше.

Попробуйте так SELECT cycle, MAX(data) AS data FROM table GROUP BY cycle;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql или задайте свой вопрос.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.7.41110

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

MS SQL выборка по максимальной дате

Letter_Ru_phpНеобходимо сделать выборку из таблицы по максимальной дате каждого поля.

Допустим есть таблица ARTDATA

Id Name DATAVAL

1 A 01.01.2015
2 A 02.01.2015
3 B 01.01.2015

2 A 02.01.2015
3 B 01.01.2015

Приведенный выше полностью рабочий пример, не единственное решение. Можно также сделать данную выборку по дате с помощью LEFTJOIN

Выборка данных из таблицы в SQL (разделы SELECT, FROM и WHERE)

Выборка данных из таблицы в SQL осуществляется с помощью следующей конструкции:
SELECT [DISTINCT|ALL] *|
[AS ] FROM [ ] [ ] [WHERE [AND ]]
[GROUP BY [ROLLUP|CUBE|GROUPING SET( )]| [HAVING ]]
[ORDER BY [COLLATE ][ASC|DESC]]

Раздел SELECT

Этот раздел является обязательным и позволяет:
Определить список выходных столбцов
Список выходных столбцов может быть указан несколькими способами:
• Указать символ *, обозначающий включение в результаты запроса всех колонок запроса в естественной последовательности.
• Перечислить в желательном порядке только нужные .
Пример: SELECT * FROM Customer

Включить вычисляемые столбцы
В качестве вычисляемых столбцов запроса могут выступать:
• Результаты простейших арифметических выражения (+, -, /, *_ или конкатенации строк (||).
• Результаты функций агрегирования COUNT(*)| ([DISTINCT|ALL] )

Примечание: В SQL Server дополнительно можно использовать оператор % — модуль (целый остаток от деления).
Включить константы
В качестве столбцов могут выступать константы числового и символьного типов.

Примечание: SELECT DISTINCT ‘Для ‘, SNum, Comm*100, ‘%’, SName FROM SalesPeople

Переименовать выходные столбцы
Вычисляемым, а также любым другим столбцам, при желании, можно присвоить уникальное имя с помощью ключевого слова AS: AS

Примечание: В SQL SERVER дать новое имя столбцу можно с помощью оператора присвоения =

Указать принцип обработки дублей строк
DISTINCT – запрещает появление строк-дублей в выходном множестве. Его можно задавать один раз для оператора SELECT. На практика первоначально формируется выходное множество, упорядочивается, а затем из него удаляются повторяющиеся значения. Обычно это занимает много времени и не следует этим злоупотреблять.
ALL (действует по умолчанию) – обеспечивает включение в результаты запроса и повторяющихся значений

Включить агрегатные функции
Функции агрегирования (функции над множествами, статистические или базовые) предназначены для вычисления некоторых значений для заданного множества строк. Используются следующие агрегатные функции:
• AVG|SUM( |[DISTINCT] ) – подсчитывает среднее значение | сумму от или , возможно без учета дублей, игнорируя NULL.
• MIN|MAX( ) – находит максимальное | минимальное значение.
• COUNT(*[DISTINCT] ) – подсчитывает число строк во множестве с учетом NULL значений | значений в столбце, игнорируя NULL значения, возможно без дублей.

Примечания по использованию:
• Функции агрегирования нельзя вкладывать друг в друга.
• Из-за значений NULL выражение SUM(F1)-SUN(F2)Sum(F1-F2)
• Внутри функций агрегирования допустимы выражения AVG(Comm*100)
• Если в результате запроса не получено ни одной строки или все значения равны NULL, то функция COUNT возвращает 0, а другие – NULL.
• Функции AVG и SUM могут применяться только для числовых типов, данных в Interval, а остальные могут использоваться для любых типов данных.
• Функция COUNT возвращает целое число (типа Integer), а другие наследуют типы данных обрабатываемых значений, вследствие чего следует следить за точностью результата функции SUM (возможно переполнение) и масштабом функции AVG.

Примеры на агрегатные функции:

• SELECT COUNT(*) FROM Customer
• SELECT COUNT(DISTINCT SNum) FROM Orders
• SELECT MAX(Amt+Binc) FROM Orders //Если Binc – дополнительное числовое поле в Orders
• SELECT AVG(Comm*100) FROM SalesPeople //Выражение внутри функции

Особенности промышленных серверов
В СУБД Oracle в разделе SELECT можно указывать дополнительные указания-подсказки (hints) (27 штук), влияющие на выбор типа оптимизатора запросов и его работу.
SELECT /*+ ALL_ROWS */ FROM Orders… //наилучшая производительность

В СУБД SQL Server:
[TOP ( ) [PERCENT] [WITH TIES]] – задает количество или процент считываемых строк. При одинаковых последних значениях возможно считывание всех таких строк и общее число может быть больше указанного.

DECLARE @p AS Int
SELECT @p=10
SELECT TOP(@p) WITH TIES * FROM Orders

Раздел FROM

Этот раздел является обязательным и позволяет:
Указать имена исходных таблиц
В разделе FROM указываются имена таблиц и/или представлений, из которых будут извлекаться данные. Причем одна и та же таблица может несколько раз входить в этот раздел.
Примечание: В СУБД Oracle можно выбирать строки и из снимков (Snapshot).

Указать псевдонимы таблиц
Под псевдонимом таблицы понимается дополнительный, обычно краткий идентификатор, указываемый через пробел после имени таблицы/представления.
Пример: Customer C

Указать вариант внешнего объединения таблиц
Если в разделе FROM указано несколько таблиц, то все они неявно считаются внешними соединениями. В стандарте предусмотрены следующие основные виды соединений таблиц:

1) Перекрестное соединение
CROSS JOIN — определяются все возможные сочетания пар строк по одной для каждой строки каждой из объединяемых таблиц. Эквивалентно картезианскому соединению. Иногда называет декартовым произведением.

2) Естественное соединение
[NATURAL] [ ] JOIN — определяются только те строки таблиц А и B, в которых значения столбцов одинаковы. Называют не совсем полноценным эквисоединением. Это автоматическое соединение по нескольким столбцам со всеми одинаковыми именами (join over).

3) Соединение объединением
UNION JOIN — определяются только те строки каждой из таблиц, для которых совпадения не были установлены. Столбцы из другой таблицы заполняются значениями NULL. Отметим, что соединение UNION и оператор UNIUN – это не одно и то же. Соединение противоположно соединению типа INNER.

4) Объединение посредством предиката
[ ] JOIN ON — фильтрует строки. Предикат может содержать подзапросы.

5) Объединение посредством имен столбцов
[ ] JOIN USING( ) – определяет соединение только по указанным столбцам, в то время как NATURAL – автоматически по всем одноименным.

Типы соединений

представляет собой один из аргументов: INNER|LEFT|RIGHT|FULL[OUTER]>
INNER – включает строки, в которых есть столбцы с совпадающими данными объединяемых таблиц. Используется по умолчанию.
LEFT[OUTER] – включает все строки таблицы А (левая таблица) и все совпадающие значения из таблицы B. Столбцы несовпадающих строки заполняются NULL-значениями.
RIGHT[OUTER] – включает все строки таблицы B (правая таблица) и все совпадающие значения таблицы А. обратный вариант для левого объединения.
FULL[OUTER] – включает все строки обеих таблиц. Столбцы совпадающих строк заполнены реальными значениями, а несовпадающих строк – NULL-значениями.
OUTER (внешний) – уточняющее слово, означающее, что несовпадающие строки из ведущей таблицы включаются вместе с совпадающими.

Примеры на внешнее объединение:

• SELECT * FROM SalesPeople INNER JOIN Customer ON SalesPeople.City=Customer.City
• SELECT * FROM Customer LEFT OUTER JOIN SalesPeople ON SalesPeople.City=Customer.City
• SELECT * FROM Customer FULL OUTER JOIN SalesPeople ON SalesPeople.City=Customer.City

Картезианские соединения и самообъединения
• Если при включении нескольких таблиц не используются те или иные варианты соединения таблиц, то такие соединения называются картезианскими. Они используются для получения строк из двух различных таблиц. Тогда например, при соединении двух таблиц, каждая из которых содержит по 20 строк, итоговая таблица будет содержать 100 строк – каждая из строк одной таблицы с каждой из строк другой таблицы. SELECT * FROM Customer, Orders.
• Соединения одинаковых таблиц называют самообъединением (self-join).

Раздел WHERE

1. Создание внутренних соединений
Связь между таблицами осуществляют с помощью операторов сравнения, а в список выходных столбцов включают квалификационные имена для одноименных столбцов из исходных таблиц.

Основные виды соединений:
Эквисоединения – это соединения таблиц, основанные на равенствах. Связь между таблицами по ключевым столбцам обеспечивает ссылочную целостность. Если при соединении используются первичный и внешний ключ то всегда существует отношение «один-ко-многим» (предок/потомок).

Тэта-соединения – это такое соединение, когда в качестве оператора сравнения применяется неравенство (, >=, , , т.е. логическое условие, которое может быть либо истинным, либо ложным. Кроме того, одно или оба сравниваемых значения в предикате могут быть равны NULL, тогда результат сравнения может быть равен UNKNOWN. Оператор SELECT извлекает только те строки из таблиц, для которых имеет значение TRUE, исключая строки, для которых он равен FALSE или UNKNOWN.

Как правильно сделать выборку SQL

Данный запрос делает выборку по диапазону даты, дата в формате 2016-10-11 00:41:08
Пробую и с DESC и с ASC, но результат один и тот же — строки сортируются по возрастанию, т.е. сначала самые старые записи, а необходимо чтобы в начале отображались самые последние записи по дате и времени. Помогите пожалуйста с запросом, не могу найти правильный ответ. Благодарю за внимание!

Проблема решается экранированием поля dateTime — так как в mysql это зарезервированное слово:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *