Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果两个查询的状态都为“已取消”,如何消除查询中的重复项(PostgreSQL)_Sql_Postgresql_Duplicates - Fatal编程技术网

如果两个查询的状态都为“已取消”,如何消除查询中的重复项(PostgreSQL)

如果两个查询的状态都为“已取消”,如何消除查询中的重复项(PostgreSQL),sql,postgresql,duplicates,Sql,Postgresql,Duplicates,如果有人可以帮助在这个查询中添加一些语句,如果他们的状态都已取消,则可以消除重复。我不想在我的查询结果中出现的示例的下图中高亮显示 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 '_____

如果有人可以帮助在这个查询中添加一些语句,如果他们的状态都已取消,则可以消除重复。我不想在我的查询结果中出现的示例的下图中高亮显示

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
)

使用
DISTINCT
子句可以删除重复的行


尝试
选择DISTINCT

您可以尝试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
);
我认为你可以做到:

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
子查询开始,因此遵循这种精神。

消除两个或消除DUP(保留一个)?另外,如何知道它是否是dup?你能提供一份工作吗?(强迫人们处理你的数据是没有意义的,努力向所有未来的用户概括你的问题)当他们拥有完全相同的数据时,他们是重复的,除了旅行总金额。就像图片中突出显示的一样,两个交易都被取消了,所以我不需要在结果中使用它们,但我不想完全消除所有取消的交易,因为有时会有一些重复的交易被取消并批准。你能发布最简单的示例吗。列数最少,但足以推断您的场景的可能答案?每个人都有一个简单的语义,比如
订单号
订单状态
,…为您提到的@jpabiado场景提供样本数据和结果会有所帮助,但它们并不完全重复,它们是一些彼此不同的数据字段,例如在图像“trip_total_amount”try
(regexp_replace(trip_total_amount)、\D”、“g”和“”):numeric AS result
中删除“trip_total_amount”中的非数字字符@jpabiado\D是“非数字”的类缩写。您需要第四个参数“g”(表示“全局”)来替换输入的所有OccursTank,但当我尝试此操作时,它会运行,但查询结果仍然显示这些参数transactions@jpabiado . . . “取消”的拼写正确吗?我正在使用的数据使用该词,这就是我在我的应用程序中使用该词的原因queries@jpabiado . . . 我最初的答案拼写不正确。我也尝试了这个方法,但它只是将所有取消的事务堆积在查询结果的较低部分。这有点帮助,但我需要更坚实的东西。不管怎样,谢谢。你是说把所有取消的交易都堆在下面的部分?你想要的记录在那里吗?如果问题与记录的放置位置有关,则可以使用ORDER BY。