Как устранить дубликаты в моем запросе, если они оба имеют статус Отменено (PostgreSQL) - PullRequest
0 голосов
/ 21 февраля 2019

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

with cte0 AS 
(
    SELECT * FROM efleet_copy AS e1
    INNER JOIN
    (SELECT mta_id, COUNT(mta_id) FROM efleet_copy WHERE EXTRACT(MONTH FROM service_date) = 02 AND mta_id LIKE '_________'
     GROUP BY mta_id HAVING COUNT(mta_id) > 1) AS e2
    ON e1.mta_id = e2.mta_id
    WHERE EXTRACT(MONTH FROM service_date) = 02
    ORDER BY e1.mta_id ASC, e1.ride_id ASC, e1.trip_number ASC
)
SELECT * FROM cte0 c
WHERE NOT EXISTS (
    SELECT 1 FROM cte0 ci
    WHERE c.ride_id = ci.ride_id
    AND status = 'Approved'
    GROUP BY ride_id 
    HAVING SUM(trip_total_amount) = 0::money
)

sample data

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вы можете попробовать предложение DISTINCT, поэтому ваш запрос выглядит следующим образом:

SELECT DISTINCT
    rate, 
    status,
    ride_id,
    trip_number,
    mta_id,
    service_date,
    service_start,
    driver_id,
    cab_number,
    trip_total_amount
FROM cte0 c
WHERE NOT EXISTS (
    SELECT 1 FROM cte0 ci
    WHERE c.ride_id = ci.ride_id
    AND status = 'Approved'
    GROUP BY ride_id 
    HAVING SUM(trip_total_amount) = 0::money
);
0 голосов
/ 21 февраля 2019

Я думаю, что вы можете сделать:

SELECT c.*
FROM cte0 c
WHERE NOT EXISTS (SELECT 1
                  FROM cte0 ci
                  WHERE c.ride_id = ci.ride_id AND
                        status = 'Approved'
                  GROUP BY ride_id 
                  HAVING SUM(trip_total_amount) = 0::money
                 ) OR
      (c.status = 'Canceled' AND
       EXISTS (SELECT 1
               FROM cte0 ci
               WHERE c.ride_id = ci.ride_id AND
                     ci.status = 'Canceled' AND
                     ci.trip_total_amount = - c.trip_total_amount
              )
      )

Проблема немного неясна.Я бы подошел ко всей логике, используя оконные функции, но вы уже начали с exists подзапросов, так что это следует в этом духе.

0 голосов
/ 21 февраля 2019

Предложение DISTINCT позволяет удалить повторяющиеся строки.

try SELECT DISTINCT

...