根据日期从 SQLQuery 中删除重复条目你好,
我尝试使用下面链接的视频来使用 SQLQuery 函数。但是,我遇到了问题。
Community.jmp.com/t5/video/gallerypage/video-id/tvcW9lZTE6Ie3IFXxeru0AYNqvj5AB5r
问题:将包含“cylinder”、“Received_Date”和“lot”的表 2 合并到包含“batch”、“cylinder”和“Batch_Date”的表 1 中
我需要在“Cylinder”上精确匹配,然后将最接近的“Received Date”向后推到“Batch Date”(Batch_Date >= Received_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 行填充(应该是最后一行 11/30/2022);其他行都是“幽灵”,因为我们只制作了 1 个“批次 1”
关于如何改进 SQL 代码以防止重复条目以及仅当收到的日期是最接近的 <= 批次日期时才选择条目,有什么帮助吗?
这是 SQLQuery 接口给出的代码
选择不同的 t1.批次,t1.批次日期作为日期,t1.气缸编号,
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.批次日期;
自动化和脚本回复:根据日期从 SQLQuery 中删除重复条目这些是您正在执行 SQL 查询的 JMP 表吗?您可以分享这些表吗?
回复:根据日期从 SQLQuery 中删除重复条目这些是文件 - 抱歉,我本想附加这些。
表1-1和表2-2如上所述。
查询结果显示最终表,其中每个批次有多个条目(但如上所述每个批次应该只有一个条目)。
回复:根据日期从 SQLQuery 中删除重复条目刚刚回复了包含文件的主线程,感谢您的联系
回复:根据日期从 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;回复:根据日期从 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 | | (文件正确) |
回复:根据日期从 SQLQuery 中删除重复条目我不太清楚如何解读您的表格。如果我查看表 2-2,会发现只有 1 行对应于气缸 1,其接收日期为 2022 年 5 月 20 日

回复:根据日期从 SQLQuery 中删除重复条目嗨 - 回复以保持主题活跃。我认为当我更新文件以删除专有信息时发生了一些事情。明天我会仔细查看并回复您。
回复:根据日期从 SQLQuery 中删除重复条目感谢您的帮助!我发现我的原始数据集中有一个错误(我修改了它以在此网站上输入以匿名化数据)。此代码运行良好,如果有任何其他问题,我会联系您。回复:根据日期从 SQLQuery 中删除重复条目最后一个问题——即使我没有将它们用作匹配条件,如何才能将从表 2 中拉出的更多列添加到最终查询表中?
我尝试在代码中添加 t2.“wt%”列,但现在代码报错。我还想同时添加其他列(总共约 10 列),但不确定如何才能不出错。
谢谢你!
回复:根据日期从 SQLQuery 中删除重复条目您遇到了什么错误?
它们应该进入自定义 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 中的所有列,我认为 SQL JMP 正在使用支持 t2。*