날짜를 기준으로 SQLQuery에서 중복 항목 제거안녕하세요,
아래 링크된 이 비디오를 사용하여 SQLQuery 함수를 사용하려고 했습니다. 하지만 문제가 있습니다.
Community.jmp.com/t5/video/gallerypage/video-id/tvcW9lZTE6Ie3IFXxeru0AYNqvj5AB5r
문제: "cylinder", "Received_Date" 및 "lot"가 있는 표 2를 가져와 "batch", "cylinder" 및 "Batch_Date"가 있는 표 1에 병합합니다.
"실린더"에 정확히 일치시켜야 하고, 그런 다음 가장 가까운 역방향 "수신 날짜"를 "배치 날짜"(배치 날짜 >= 수신 날짜)로 가져와야 합니다.
저는 쿼리를 생성했고 또한 이론적으로 각 배치에 대해 고유한 로트 번호를 하나만 제공해야 하는 숫자 태그를 생성하는 단계도 수행했습니다(아래 표에는 표시되지 않음)
하지만 내가 얻는 것은 이것입니다.
| 일괄 | 배치 날짜 | 실린더 번호 | 로트 번호 | 수신 날짜 |
| 1 | 2023년 2월 13일 | 55 | A | 2022년 6월 14일 |
| 1 | 2023년 2월 13일 | 55 | B | 2022년 10월 21일 |
| 1 | 2023년 2월 13일 | 55 | C | 2022년 11월 30일 |
쿼리에서 채워진 행은 1개만 있어야 합니다(마지막 행은 2022년 11월 30일이어야 함). 나머지는 "배치 1"을 1개만 만들었기 때문에 "유령"입니다.
중복 입력을 방지하고 수신 날짜가 배치 날짜와 가장 가까운 경우에만 입력을 선택하도록 SQL 코드를 개선하는 방법에 대한 도움이 있나요?
이는 제공된 SQLQuery 인터페이스의 코드였습니다.
DISTINCT t1.Batch, t1.Batch_Date AS Date, t1.Cylinder_Number를 선택하십시오.
t2.Lot_Number, t2.Cylinder_Number AS "Cylinder_Number 2", t2.Lot_Date AS "날짜 2", MIN(t2."배치 번호") AS "최소 배치 번호"
"표 1" t1에서
왼쪽 외부 조인 "테이블 2" t2
ON ( ( t1.Cylinder_Number = t2.Cylinder_Number ) AND ( t1.Cat_Date >= t2.Lot_Date ) )
t1.배치, t1.배치_날짜, t1.실린더_번호로 그룹화
t2.로트 번호, t2.원통 번호, t2.로트 날짜;
자동화 및 스크립팅Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거이게 당신이 SQL 쿼리를 수행하는 JMP 테이블인가요? 테이블을 공유할 수 있나요?
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거여기에 파일이 있습니다. 죄송하지만 첨부하려고 했던 파일입니다.
표 1-1 및 표 2-2는 위에서 설명한 바와 같습니다.
쿼리 결과는 각 배치에 대해 여러 항목이 있는 최종 표를 보여줍니다(하지만 위에서 설명한 대로 배치당 항목은 1개만 있어야 함).
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거방금 파일이 있는 메인 스레드에 답장했습니다. 연락해 주셔서 감사합니다.
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거이것은 제가 JMP의 제한된 SQL 기능으로 시도할 수 있는 한계에 매우 가깝습니다(적어도 데이터 테이블을 사용할 때는). SQL + JSL을 사용하는 것이 가장 간단할 가능성이 큽니다.
Names Default To Here(1);
res = New SQL Query(
Version(130),
Connection("JMP"),
JMP Tables(
["t1" => "$DOWNLOADS\Table1-1.jmp",
"t2" => "$DOWNLOADS\Table 2-2.jmp"]
),
QueryName("SQLQuery2"),
CustomSQL(
"\[SELECT
t1.Cylinder,
t1.Batch,
t1."Batch Date",
t2."Received Date",
t2.Supplier,
t2.Lot
FROM t1
LEFT OUTER JOIN t2 ON
t1.Cylinder = t2.Cylinder
AND t1."Batch Date" >= t2."Received Date"
]\")
) << Run;
res << select where(Row() == Col Max(Row(), :Cylinder, :Batch) | Is Missing(:Lot));
res << Invert Row Selection;
res << delete rows;Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거안녕하세요 - 빠른 도움 감사합니다! 매크로를 시도했는데 불행히도 일부 항목의 경우 가장 오래된 날짜를 유지합니다. 하지만 모든 항목에 대해 이렇게 하는 것 같지는 않습니다(아래 표의 마지막 행 참조).
따라서 동일한 배치에 대해 여러 행이 나타나지 않는다는 점은 확실히 개선된 것이지만, 해당 배치에 대해 올바른 로트/수령 날짜를 일관되게 가져오지 않는다는 문제가 있습니다.
예
| 실린더 | 일괄 | 배치 날짜 | 수신 날짜 | 공급업체 | 많은 | | 수신해야 할 날짜 |
| 8 | 2273 | 2023년 8월 9일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 3 | 2274 | 2023년 8월 10일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 2 | 2275 | 2023년 8월 11일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 10 | 2276 | 2023년 8월 12일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 6 | 2277 | 2023년 8월 12일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 9 | 2278 | 2023년 8월 13일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 1 | 2279 | 2023년 8월 14일 | 2022년 5월 20일 | B | 55 | | 2023년 6월 22일 |
| 212 | 2280 | 2023년 8월 15일 | 2023년 6월 22일 | B | 74 | | (파일이 정확합니다) |
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거저는 귀하의 표를 어떻게 읽어야 할지 잘 모르겠습니다. 표 2-2를 보면 Cylinder 1에 대한 행이 1개뿐인데, 수신 날짜는 05/20/2022입니다.

Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거안녕하세요 - 주제를 활성화하기 위해 답장합니다. 독점 정보를 제거하기 위해 파일을 업데이트했을 때 무슨 일이 생긴 것 같습니다. 내일 더 살펴보고 답장을 보내드리겠습니다.
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거이 도움에 감사드립니다! 원래 데이터 세트에 오류가 있다는 걸 깨달았습니다(데이터를 익명화하기 위해 이 웹사이트에 입력하기 위해 수정했습니다). 이 코드는 잘 작동하고 있습니다. 다른 질문이 있으면 연락드리겠습니다.Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거마지막 질문 하나 더 있습니다. 일치 기준으로 사용하지 않더라도 테이블 2에서 더 많은 열을 가져와서 최종 쿼리 테이블에 어떻게 추가할 수 있을까요?
위의 코드에 t2."wt%" 열을 추가하려고 했지만 이제 코드가 오류를 발생시킵니다. 동시에 가져오고 싶은 다른 열이 있는데(총 10개 열 정도) 오류가 발생하지 않고 이 작업을 수행하는 방법을 잘 모르겠습니다.
감사합니다!
Re: 날짜를 기준으로 SQLQuery에서 중복 항목 제거어떤 오류가 발생합니까?
Custom SQL() 부분 내부로 들어가야 합니다(제가 시도해 보았는데 t2."wt%")에서는 잘 작동했습니다.
CustomSQL(
"\[SELECT
t1.Cylinder,
t1.Batch,
t1."Batch Date",
t2."Received Date",
t2.Supplier,
t2.Lot,
t2."wt%"
FROM t1
LEFT OUTER JOIN t2 ON
t1.Cylinder = t2.Cylinder
AND t1."Batch Date" >= t2."Received Date"
]\")
t2의 모든 열이 필요한 경우 JMP에서 사용하는 SQL이 t2를 지원한다고 생각합니다.*