sql - 如何在普通 SQL 中只选择一次元素
问题描述
我见过其他与我类似的问题,但我还没有找到一个可以真正帮助我的问题。我有一个表,定义如下:
CREATE TABLE "DOWNLOAD_HISTORY"
( "ID" NUMBER GENERATED BY DEFAULT AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 344 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
"IDUSER" NUMBER NOT NULL ENABLE,
"IDFORNITORE" NUMBER NOT NULL ENABLE,
"IDRFX" NUMBER NOT NULL ENABLE,
"DOCNUM" NUMBER NOT NULL ENABLE,
"DOWNLOAD_TIMESTAMP" TIMESTAMP (6) NOT NULL ENABLE
) ;
此 DDL 来自 OracleDB12 数据库。
以下是一些示例数据
我想要完成的是:如果已经有一行具有相同的元组(IDRFX,DOCNUM),则不将其包含在 SELECT 语句中。因此,元组 (384,1) 应该只出现一次。
我所做的(到目前为止):考虑到甚至可以从 MSSQL 数据库执行此查询,我尝试用普通 SQL 编写这两个查询。
SELECT *
FROM DOWNLOAD_HISTORY dh
WHERE dh.IDRFX = 384 AND ID IN (SELECT ID FROM DOWNLOAD_HISTORY dh2 WHERE dh.DOCNUM <> dh2.DOCNUM AND dh.IDRFX <> dh2.IDRFX )
SELECT t1.*
FROM DOWNLOAD_HISTORY t1
WHERE NOT EXISTS (SELECT * from DOWNLOAD_HISTORY t2
where t2.DOCNUM = t1.DOCNUM
and t2.IDRFX = t1.IDRFX)
但他们中没有一个能够真正把我带到任何地方。如果可能的话,我想问一下我在哪里做错了,我该如何解决。
解决方案
没有解析函数......
with data as(
select 1 id, 384 idrfx, 1 docnum from dual union all
select 2 id, 384 idrfx, 1 docnum from dual union all
select 3 id, 384 idrfx, 2 docnum from dual union all
select 4 id, 385 idrfx, 1 docnum from dual
)
,uniqueTuple as (
select min(id) id from data
group by idrfx,docnum
)
select d.*
from data d
join uniqueTuple u on u.id = d.id
推荐阅读
- wso2 - 如何启用 WSO2 IS 版本 5.11.0 的新 & beta GUI?
- swift - UIcollection 视图中未显示数据。我做错了什么
- python - Pycharm 在使用 OpenCV 和 Python3.9 的 macOS“Big Sur”上不显示图像预览
- snowflake-cloud-data-platform - 使用 matillion ETL for snowflake 将两个 json 语句合并为一个
- r - 如何结合ggplot绘制烛台图?
- node.js - 猫鼬查询即使在不期望的情况下也会返回值 - 使用时间截止
- python - 是过拟合还是数据泄露问题?
- api - 如何获取 GitHub 私有存储库的工作流列表?
- cordova - 如何将文件从互联网下载到应用程序内部子目录以仅在应用程序(android)中使用而无需请求在 Ionic 4 中的存储权限
- python - 一次维护许多熊猫数据框