Задать вопрос
@alexbershow

Как получить последнюю запись для определённого поля?

добрый день
есть таблица clients
client;
paramname;
paramvalue;
date;
source;
В данную таблицу ежедневно грузятся clinet (ид уникальный), меняются параметры и их значения
как вывести ид client where paramname=pas and paramvalue=2 and source=web но вывести последнюю запись по дате date
в MSSQL
  • Вопрос задан
  • 233 просмотра
Подписаться 1 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Продвинутый SQL
    5 недель
    Далее
  • Яндекс Практикум
    SQL для разработки
    4 месяца
    Далее
  • Академия Eduson
    SQL-разработчик: тариф Базовый
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
@rPman
простые ответы уже в комментариях выложили, но есть еще способы...

например при обновлении/добавлении данных (можно и на тригере), писать в специальную кеш-табличку с одной строчкой идентификатор (или всю строчку данных) последнего элемента, если речь идет о БОЛЬШИХ данных, этот вариант эффективнее в разы (по индексам - N*log N а тут константа, с ценой константы на запись).
если условие выбора вариативное, в кеш таблицу можно запихивать не одну строчку - а варианты по paramname, paramvalue и source (в этой кеш табличке индексы по этим полям уже нужны, но таблица будет маленькой).

достоинства - скорость и возможная экономия памяти (не нужен индекс в принципе для этой задачи или не требуется autoincrement для id, т.е. метод совместим с партицированием в т.ч. самодельным, но тогда в триггере проверять кешированную date и обновленную на случай гонок разных партиций на порядок записи в кеш), это может быть очень критично при БОЛЬШИХ данных.

запись данных в отдельную табличку (тоже без индексов) почти бесплатный, точнее там мизерная константа добавляется, несравнимо меньше чем время на обновление индексов и уж тем более поиск данных.

Ну и главное, если бакэнд - непрерывно работающее приложение (на самом деле и это не требование но логика тогда чуть сложнее будет), нужные кеш-данные можно хранить в оперативной памяти (и помещать туда при запуске, делая уже полноценный запрос в базу) в этом случае вместо триггера лучше добавить логику в код, добавляющий данные в базу.
Ответ написан
master_z
@master_z
Программист
Может быть как-то так
SELECT TOP 1 client
FROM clients
WHERE paramname = 'pas'
  AND paramvalue = 2
  AND source = 'web'
ORDER BY date DESC;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы