ID1 ID2 DATE INITIAL FINAL 20 328 2016/11/08 01 01 21 328 2016/11/11 01 01 53 766 2016/09/26 00 01 39 766 2016/11/25 01 00
每个ID2有两个条目
在上面的示例中,我想选择INITIAL = 01 或 FINAL = 01的记录,但是当INITIAL = 01 和 FINAL = 01时,对于相同的ID2,我想要选择具有较早日期的那个
我正在寻找一个看起来像这样的最终设置
ID1 ID2 DATE INITIAL FINAL 20 328 2016/11/08 01 01 53 766 2016/09/26 00 01 39 766 2016/11/25 01 00
答案 0 :(得分:0)
在此示例中,“OR”包括“AND”
试试吧
?&
答案 1 :(得分:0)
将您的2个案例视为单独的查询,然后将它们联合起来。 WITH只是我构建虚拟数据。这不会解决id2具有01 initial和01 final的情况,而另一行具有00和01 ---但这不符合您的要求。如果同一个id2的两个01 01行具有相同的最小日期,它也不会解决这个问题,但是再次 - 这不在规范中;我只是想说明那些事情是彻底的。
library(data.table)
setDT(Test_File)[, {
v1 <- sub("\\d+", "", Product)
v2 <- sub("\\D+", "", Product)
.(Duplicate = any(v1=="E") & uniqueN(v1)>1 & anyDuplicated(v2)>0)} , Order]
# Order Duplicate
#1: 1 FALSE
#2: 2 TRUE
#3: 3 FALSE
#4: 4 FALSE
#5: 5 FALSE
答案 2 :(得分:0)
尝试使用以下查询。 它将丢弃INITIAL = 00和FINAL = 00的行,因为您只想选择INITIAL = 01或FINAL = 01 AND INITIAL = 01 AND FINAL = 01且早期日期的记录
SELECT ID1,ID2,DATE,INITIAL,FINAL FROM TEST1 WHERE ID1 NOT IN(SELECT ID1 FROM
(SELECT ID1,
ID2,
DATE,
INITIAL,
FINAL,
RANK() OVER (PARTITION BY ID2 ORDER BY DATE) rn
FROM TEST1
WHERE (INITIAL = '01'
AND FINAL = '01')
) WHERE rn>1 ) AND (INITIAL != '00'OR FINAL!= '00');