SQL: получите только записи, значение которых изменилось

Попробуйте это:

fastify.get('/app/name', {
  schema: {
    querystring: {
      id: { type: 'integer' },
      name: { type: 'string' },
      _: { type: 'integer' },
    }
  },
},
(request, reply) => {
  ...
6
задан Mike Sickler 27 March 2009 в 14:14
поделиться

7 ответов

Если я считал это право, Вы не ищете измененные строки, но строки, где уровень изменяется с предыдущей даты. Этот запрос или что-то как он должны сделать это:

SELECT  r1.Code, r1.Date, r1.Rate
FROM    RateTable r1
WHERE   r1.Rate <> (SELECT TOP 1 Rate
                   FROM    RateTable
                   WHERE   Date < r1.Date
                   ORDER BY Date DESC)
15
ответ дан 8 December 2019 в 13:02
поделиться

Если Ваш RDBMS поддерживает аналитические функции затем, оптимальный метод - почти наверняка это:

select code, date, rate, last_rate
from
(
select code,
       date,
       rate,
       lag(rate) over (partition by code order by date) last_rate
from   ratetable
) my_tb
where  my_tb.rate != my_tb.last_rate
3
ответ дан 8 December 2019 в 13:02
поделиться

Добавьте новый столбец, который будет DateTime и отследит когда измененный уровень. Затем можно просто возвратить любые столбцы кто DateModified> = x.. Где x является прошлым разом, когда Вы проверили.

0
ответ дан 8 December 2019 в 13:02
поделиться

Я добавил бы столбец [ModifiedDate] к Вашей таблице и обновлению, это - значение каждый раз, когда новая запись вставляется или обновляется. Затем Вы сможете получить данные из таблицы на основе того столбца:

SELECT * FROM [YourTable] WHERE [ModifiedDate] > '2008-01-20 10:20'
0
ответ дан 8 December 2019 в 13:02
поделиться

Если Вы добавляете новый столбец "LastChangedDate", и Вы отслеживаете последнее чтение в другой таблице (т.е. LastReadedValues), чем Вы можете easly отслеживать изменения.

0
ответ дан 8 December 2019 в 13:02
поделиться

как насчет этого подхода парни?

добавьте немного столбца под названием ChangedSinceLastRead, установите его на 1 каждый раз, когда Вы изменяете значение в этой таблице и в Вашем ВЫБОРЕ "чтения запроса Select * ОТ Уровня ГДЕ ChangedSinceLastRead = 1"

после этого огня запроса Select другой запрос "ЧАСТОТА ОБНОВЛЕНИЯ УСТАНОВИЛ ChangedSinceLastRead = 0"

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

просто другой способ решить это ;-) я хотел бы видеть последствия производительности этого, а также вышеупомянутого предложенного подхода даты и времени

0
ответ дан 8 December 2019 в 13:02
поделиться

Я советовал бы, если Вы управляете этим в этой точке только к правильным данным держателя для книг. Другими словами, только запишите запись на таблицу, когда уровень изменится. Можно затем предположить, что любые данные между изменениями останутся такими же. Это значительно уменьшит объем данных, который необходимо сохранить.

Тем не менее этот запрос, или что-то закрывается, что-то для выполнения то, что Вы просите:

select rt.Code, MIN(rt.Date), rt.Rate
from RateTable rt
group by rt.Code, rt.Rate

править: извините, изменитесь макс. на минуту

0
ответ дан 8 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

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