给定一个表
CREATE TABLE data(
irs_number VARCHAR (50),
mop_up INTEGER,
ou VARCHAR (50)
);
我如何返回所有匹配的记录...
irs_number
值,并且irs_number
的mop_up中至少有一个必须设置为 1
和
ou
值不相同,即仅返回与具有相同irs_number
的行不匹配的值。...以便返回所有< code>irs_numbers(不仅仅是条件为真的一个-参见下面的例子)。
我尝试了此操作,但查询无法在合理时间内完成:
SELECT irs_number, mop_up, ou
FROM data outer_data
WHERE (SELECT count(*)
FROM data inner_data
WHERE inner_data.irs_number = outer_data.irs_number
AND inner_data.mop_up = 1 OR outer_data.mop_up = 1
AND inner_data.ou <> outer_data.ou
);
以及此处描述的重复计数的变化:如何在PostgreSQL中查找重复记录-它们总是只返回重复记录,而不是应用的正确过滤器。
编辑:
示例数据:
INSERT INTO data VALUES
('0001', 1, 'abc'),
('0001', 0, 'abc'),
('0001', 0, 'cde'),
('0001', 0, 'abc'),
('0002', 1, 'abc'),
('0002', 0, 'abc'),
('0003', 0, 'abc'),
('0003', 0, 'xyz')
;
SQLFiddle: http://sqlfiddle.com/#!17/be28f
理想情况下,查询应返回:
irs_number mop_up ou
-----------------------
0001 1 abc
0001 0 abc
0001 0 cde
0001 0 abc
(顺序不重要)这意味着它应该返回符合上述条件的< code>irs_number的所有行。
我认为这种连接可以:
SELECT * FROM data
WHERE irs_number in (
SELECT irs_number
FROM data d
WHERE EXISTS (SELECT 1
FROM data
WHERE irs_number = d.irs_number
AND (mop_up = 1 OR d.mop_up = 1)
AND ou <> d.ou
)
)
查看演示
您应该能够使用一个简单的存在
子句来执行此操作:
SELECT irs_number, mop_up, ou
FROM data d
WHERE EXISTS (SELECT 1
FROM data d2
WHERE d2.irs_number = d.irs_number AND
d2.mop_up = 1 AND
d2.ou <> d.ou
);
编辑:
上面曲解了问题。它假设< code>mop_up = 1需要在不同的< code>ou上。当我阅读这个问题时,这是模糊的,但似乎不是你想要的。因此,有两个< code >存在地址:
SELECT irs_number, mop_up, ou
FROM data d
WHERE EXISTS (SELECT 1
FROM data d2
WHERE d2.irs_number = d.irs_number AND
d2.mop_up = 1
) AND
EXISTS (SELECT 1
FROM data d2
WHERE d2.irs_number = d.irs_number AND
d2.ou <> d.ou
);
这是一个数据库
这两种解决方案都能够利用上的索引(irs_number,mop_up,ou)
。
我有以下表在PostgreSQL 11.0 我想过滤上表,这样,如果col2和col4相等,只应选择此匹配项,并排除下面两行。当col2和col4不相等时,应该保留col2=col3的行。 所需的输出是: 我正在尝试下面的问题,到目前为止没有成功。 但这将包括已经有匹配的行,我希望在最终输出中排除这些行。
这似乎很简单,但我似乎无法理解。我知道如何将pandas数据帧过滤到满足条件的所有行,但当我想要相反的结果时,我总是会遇到奇怪的错误。 这是一个例子。(上下文:一个简单的棋盘游戏,棋子在网格上,我们试图给它一个坐标,并返回所有相邻的棋子,但不是实际坐标上的实际棋子) 我认为应该只是否定后面括号中的布尔值,但这似乎不是它的工作方式。 我想让它在5,6时归还母牛,而不是在5,7时归还狼(因为这是当前的
编辑2019:此问题是在2016年11月,当前方法和以前方法的接受答案如下。 我有一个<code>数据。表约有250万行的表。有两列。我想删除两列中重复的任何行。之前的数据。帧我会这样做:<code>df- 有什么建议吗? 干杯,戴维 例 在上面的data.table中,其中< code>V2是表键,只有第4、7和10行将被删除。
我想在指定的时间戳范围内从数据帧中选择行的子集。 下面是我所做的,但它似乎没有工作。我正在尝试选择发生在01/01/2019 01:00和01/01/2021 01:00之间的行子集。 非常感谢。
我想对两列使用不同的条件来聚合行。 当我做,我得到输出1 当我做时,我得到输出2 是否有一种方法可以进行聚合,将输出1显示到,将输出2显示到?
让我们假设我的数据frame如下所示: 我有一个的列表,我想从Dataframe中删除它们。该列表超过200个长度,因此多个筛选器太麻烦了。 是否可以通过传递的列表来进行筛选?