Существует ли способ получить доступ к “предыдущей строке” значение в операторе SELECT?

Я добавил keras.backend.clear_session () в конце моего обучающего файла .py. Это очистит сессию, как и ожидалось, и теперь я могу рассчитать несколько тренировок один за другим!

Спасибо вам @sebrockm

80
задан Gabriel L. 28 March 2018 в 01:11
поделиться

4 ответа

SQL имеет не созданный в понятии порядка, таким образом, необходимо заказать некоторым столбцом для этого, чтобы быть значимыми. Что-то вроде этого:

select t1.value - t2.value from table t1, table t2 
where t1.primaryKey = t2.primaryKey - 1

Если Вы знаете, как заказать вещи, но не, как получить предыдущее значение, учитывая текущее (EG, Вы хотите заказать в алфавитном порядке), затем, я не знаю о способе сделать, это в стандартном SQL, но большинстве реализаций SQL будет иметь расширения, чтобы сделать это.

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

select  rank() OVER (ORDER BY id) as 'Rank', value into temp1 from t

select t1.value - t2.value from temp1 t1, temp1 t2 
where t1.Rank = t2.Rank - 1

drop table temp1

Если необходимо повредить связи, можно добавить столько же столбцов по мере необходимости к ORDER BY.

54
ответ дан RossFabricant 24 November 2019 в 09:52
поделиться

Oracle, PostgreSQL, SQL Server и значительно большему количеству механизмов RDBMS назвали аналитические функции LAG и LEAD это делает эту самую вещь.

В SQL Server до 2012 необходимо было бы сделать следующее:

SELECT  value - (
        SELECT  TOP 1 value
        FROM    mytable m2
        WHERE   m2.col1 < m1.col1 OR (m2.col1 = m1.col1 AND m2.pk < m1.pk)
        ORDER BY 
                col1, pk
        )
FROM mytable m1
ORDER BY
      col1, pk

, где COL1 столбец, которым Вы заказываете.

Наличие индекса на (COL1, PK) значительно улучшит этот запрос.

26
ответ дан Quassnoi 24 November 2019 в 09:52
поделиться

ОСТАВЛЕННЫЙ СОЕДИНЯЮТ таблицу с собой, с условием объединения, разработанным, таким образом, строка, подобранная в версии, к которой присоединяются, таблицы, является одной предыдущей строкой для Вашего конкретного определения "предыдущих".

Обновление: Сначала я думал, что Вы захотите сохранить все строки с ПУСТЫМИ УКАЗАТЕЛЯМИ для условия, где не было никакой предыдущей строки. Чтение его снова, Вы просто хотите это отобранные строки, таким образом, Вы должны внутреннее объединение, а не левое соединение.


Обновление:

Более новые версии SQL-сервера также имеют ЗАДЕРЖКУ и ВЕДУЩИЕ функции Работы с окнами, которые могут использоваться для этого, также.

9
ответ дан Joel Coehoorn 24 November 2019 в 09:52
поделиться

Выбранный ответ будет только работать, если не будет никаких разрывов в последовательности. Однако при использовании автоматически сгенерированного идентификатора, вероятно, будут разрывы в последовательности из-за вставок, которые откатывались.

Этот метод должен работать, если у Вас есть разрывы

declare @temp (value int, primaryKey int, tempid int identity)
insert value, primarykey from mytable order by  primarykey

select t1.value - t2.value from @temp  t1
join @temp  t2 
on t1.tempid = t2.tempid - 1
2
ответ дан HLGEM 24 November 2019 в 09:52
поделиться
Другие вопросы по тегам:

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