AZ93 Ответов: 2

Пройдитесь по таблице и посмотрите, не изменилась ли цена


У меня есть столик а

table A 
 Auditid | ReqId | Payment
 1       | 123   | 0.00
 2       | 123   | 30
 3       | 123   | 20
 4       | 123   | 20
 5       | 123   | 20
 6       | 123   | 20
 7       | 456   | 40
 8       | 456   | 40
 9       | 789   | 0
 10      | 789   | 20


Теперь мне нужен запрос, который будет проверять каждый reqid и проходить через таблицу, чтобы проверить, была ли изменена сумма.
Итак, для reqid 123 он возьмет максимальный идентификатор аудита: 6 и сравнит эту цену с идентификатором аудита 5, его равным, поэтому он перейдет к 4, который также равен, он перейдет к 2 и вернет этот идентификатор req.
для reqid 456: он проверит идентификатор аудита 8 с 7 и его равным, поэтому он ничего не вернет. для req id 786 он вернет reqid, потому что цена была изменена.

Выход:

Reqid
123   
789


Что я уже пробовал:

select Payment from [table A]  a
where Auditid = (select Auditid 
from (select ROW_NUMBER() over (order by Auditid desc) as 'rowNum', Auditid from [table A] where  ReqId = '11115' ) withRowNum
where rowNum = 2)

2 Ответов

Рейтинг:
2

Richard Deeming

Попробуй:

SELECT
    Reqid,
    COUNT(DISTINCT Payment) As PriceCount,
    MIN(Payment) As MinimumPayment,
    MAX(Payment) As MaximumPayment
FROM
    [table A]
GROUP BY
    Reqid
HAVING
    COUNT(DISTINCT Payment) > 1
;


Рейтинг:
0

kirthiga S

Declare @table table (Auditid int,ReqId int,Payment int)
insert into @table values 
 (1, 123, 0),
 (2, 123, 30 ),
 (3, 123, 20 ),
 (4, 123, 20 ),
 (5, 123, 20 ),
 (6, 123, 20 ),
 (7, 456, 40 ),
 (8, 456, 40 ),
 (9, 789, 0	 ),
 (10, 789, 20)
 ;with cte as (
 select *,Rank() over(partition by ReqId order by Payment)Rn from @table) 
 select ReqId from cte where rn>1 group by ReqId