Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
GUEST00001324
Guest |
Добрый день! Подскажите пожалуйста, есть таблица (5 столбцов) Необходимо сделать выборку когда в определенном столбце цифра стала больше чем была. Спасибо. |
2 авг 17, 12:19 [20694532] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
GUEST00001324, стала и была - это две разные строки в таблице или два разных состояния одной и той же строки? З.Ы. А лучше - приведи тестовый набор данных и желаемый результат на этом наборе |
2 авг 17, 12:29 [20694573] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
Пример: Имеются столбцы: id, карта, дата, время, сумма. Сумма постоянно меняется. 1200.23 1134.01 2700.04 Необходимо это зафиксировать повышение суммы и вывести изменение, когда это произошло и карту. |
2 авг 17, 12:45 [20694639] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
GUEST00001324, 0) lead/lag 1) apply + top 1 |
2 авг 17, 12:56 [20694679] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
Уточняю записей больше 1000 Нужно вывести период т.е. когда произошло пополнение например: карта1/дата1/время1/110.01 карта1/дата2/время2/23987.07 Прошу прощения за сложности :) |
2 авг 17, 13:01 [20694693] Ответить | Цитировать Сообщить модератору |
что бы это значило
Guest |
GUEST00001324, ничего не понятно, нужен пример: есть данные -> нужно получить. Наглядно |
2 авг 17, 13:14 [20694736] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
GUEST00001324, Ф.А.К., пункт №6 |
2 авг 17, 13:14 [20694737] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Это означает, что "в разных строках поле сумма разная" или "внешнее приложение постоянно меняет значения в поле сумма" |
||
2 авг 17, 13:29 [20694812] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Т.Е. Получить таблицу Карта/дата1/время1/дата2/время2/сумма1/сумма2/(сумма2-сумма1=пополнение) При условии, что сумма2>сумма1 Так? |
||
2 авг 17, 13:33 [20694833] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
SELECT TOP 1000 [id] ,[cardid] ,[date] ,[time] ,[amount] FROM [test].[dbo].[cards] id - int cardid - varchar date - int Time - int amount - float Пример: Имеются столбцы: id, карта, дата, время, сумма. Сумма постоянно меняется. (в разных строках поле сумма разная) 1200.23 1134.01 2700.04 Нужно вывести период т.е. когда произошло пополнение например: карта1/дата1/время1/110.01 карта1/дата2/время2/23987.07 Прошу прощения! |
2 авг 17, 13:34 [20694837] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
982183, Да, все верно. Учитывая что карты разные. |
2 авг 17, 13:47 [20694877] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Как пробовал? |
2 авг 17, 14:48 [20695078] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
GUEST00001324,
Запрос: with t as ( select id,cardid,dt,amount, lead(amount) over (partition by cardid order by dt desc) as amount_last from mytable ) select * from t where isnull(amount_last,0) < amount order by dt Результат запроса:
Оно? |
||||||||||||||||||||||||||||||||||||||||||||||
2 авг 17, 16:10 [20695407] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
А можете подсказать как это провернуть через курсор. Никак не получается выборку нормально сделать. |
2 авг 17, 22:34 [20696397] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
Не могу понять в чем ошибка здесь
|
|
3 авг 17, 09:39 [20696949] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Оно ?select cardid ,datetime ,amount from T1 where amount > (select top 1 amount t2.Amount from T1 T_old where T_old.cardid = T1.cardid and T1.datetime > T_old.datetime order by T_old.datetime desc) |
3 авг 17, 10:49 [20697182] Ответить | Цитировать Сообщить модератору |
GUEST00001324
Guest |
Я так понимаю тут опущена конструкция: with t_old as Верно? Т.к. t_old отсутствует. |
||
3 авг 17, 11:00 [20697233] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31784 |
|
||
3 авг 17, 16:21 [20698526] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
LEAD быстрее. |
||
4 авг 17, 10:54 [20699955] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
И на сколько быстрее - это еще вопрос. |
||
4 авг 17, 11:55 [20700260] Ответить | Цитировать Сообщить модератору |
Jaffar Member Откуда: Сообщений: 633 |
declare @__TEMP table(Kart numeric(16), DT datetime, Summ money) insert into @__TEMP(Kart, DT, Summ) select 1, '2010-01-01', 100 union all select 1, '2010-01-03', 100 union all select 1, '2010-01-08', 150 union all select 2, '2010-01-05', 150 union all select 2, '2010-01-07', 120 union all select 2, '2010-01-12', 110 union all select 3, '2010-01-01', 100 union all select 3, '2010-01-04', 170 select t.Kart, t.Dt1, t.DT2, t.Summ1, t.Summ2, t.Summ2 - t.Summ1 Delta from (select t.KART, t.DT DT1, t.Summ Summ1, Lead(t.DT) over(partition by t.Kart order by t.DT asc) DT2, Lead(t.Summ) over(partition by t.Kart order by t.DT asc) Summ2 from @__TEMP t /**/ ) t where t.Summ2 > t.Summ1 order by t.Kart, t.DT1 |
4 авг 17, 12:30 [20700407] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |