Я хочу сравнить одни и те же столбцы строк, попадающие в одну и ту же группу, созданную с помощью раздела по предложению в SQL. Моя таблица содержит данные ниже:
Id Serial_Number Last_update_date Flag
1 3344 07-05-2024 N
2 3344 02-05-2024 N
3 9098 20-02-2024 Y
4 9098 20-02-2024 Y
5 2323 07-03-2023 Y
6 2323 17-10-2023 Y
7 2323 17-10-2023 Y
8 1894 10-07-2022 N
9 1894 20-02-2024 N
10 1894 02-05-2024 N
В приведенных выше данных группировка должна выполняться по столбцу Serial_Number и проверять, совпадают ли какие-либо две даты в пределах серийного_номера, флаг для всех членов группы должен быть Y, в противном случае все должны быть N.
Я попробовал использовать count(distinct last_update_date) over partition by serial_number, но это не работает.
with cte as (
select a.*, count(distinct last_update_date)
over (partition by serial_number) as cnt
from my_table a
)
select * from cte
Что-то вроде: select case when max(cnt) over(partition by serialnumber) > 1 THEN 'Y' ELSE 'N' END, * FROM (select *, COUNT(*) OVER(PARTITION BY Serial_number, last_update_date) AS cnt FROM yourtable) x
@siggemannen, почему ты рассчитываешь Флаг? Флаг уже является частью исходных данных.
@BartMcEndree, я читал, что флаг — это ожидаемое значение, которое он ищет :)
@Мохаммед Ариф, пожалуйста, уточните исходные данные и ожидаемые результаты в виде отдельных таблиц.


WITH CTE as
(
SELECT Serial_number, count(*) as DateCount
FROM my_table
GROUP BY Serial_number, Last_update_date
HAVING Count(*) > 1
)
SELECT m.*,
CASE WHEN DateCount > 1 THEN 'Y' ELSE 'N' END as CalculatedFlag
FROM my_table m
LEFT JOIN CTE on CTE.Serial_number=m.Serial_number
Если любые две даты в разделе равны, то max(dense_rank()) < count(*) для этого раздела.
with cte as (
select a.*
,dense_rank()over (partition by serial_number order by last_update_date) as rnk
from my_table a
)
select *
,case when max(rnk)over(partition by serial_number)
< count(*)over(partition by serial_number)
then 'Y'
else 'N'
end flag
from cte
order by id
Возможно, мы могли бы использовать эту скрипту для совместной работы над решением dbfiddle.uk/rRvXt-uM