试图绞尽脑汁,大量谷歌搜索,但无济于事。我有一个数据集,其中包含我需要查询的以下字段:DEPT,NUM,TERM,ITLE
. 我有以下可能的行。
DEPT--NUM---TERM------TITLE
OSS - 1550 - 200830 - COURSE NAME (CI)
OSS - 1550 - 200930 - COURSE NAME (CI)
OSS - 1550 - 201230 - COURSE NAME
ENG - 1600 - 200930 - OTHER COURSE (CI)
OSS - 1600 - 200830 - ANOTHER COURSE (CI)
USS - 2500 - 201240 - COURSE (CI)
PSY - 1600 - 200830 - COURSE TITLE
我需要做的是用这样的数据查询一个表,然后拉出DEPT/NUM
(OSS 1550),其中标题与查询匹配,前提是它是最新的标题。
因此,如果我搜索 (CI),我想要 3 个使用上述设置的结果(ENG 1600、OSS 1600、ISS 2500),因为 201230 是 OSS 1550 的最新条目,我不想要那个,但我确实想要其他。现在,我一生都无法弄清楚如何编写一个可以做到这一点的查询。
任何帮助,将不胜感激。如果我不够清楚,请告诉我。
编辑
我只得到一条记录,这是我根据您所说的 SELECT data.* FROM ( SELECT SCBCRSE_SUBJ_CODE || ' ' || SCBCRSE_CRSE_NUMB AS crs_combo, SCBCRSE_TITLE as title, row_number() over (ORDER BY SCBCRSE_EFF_TERM DESC, SCBCRSE_CRSE_NUMB DESC) 作为 SCBCRSE WHERE (SCBCRSE_TITLE LIKE '%' || :srch || '%') ) 数据 WHERE data.term = 1
我的格式现在正在工作......不知道为什么我有四个空格。
再次编辑我想我没有提供足够的样本数据......见上面的编辑表。我需要标题中具有唯一 DEPT/NUM 和 CI 的三个记录,但不需要具有较旧标题和 CI 的记录。有道理。
抱歉不清楚。
答案...这是赢家。
SELECT data.*
FROM (
SELECT SCBCRSE_SUBJ_CODE || ' ' || SCBCRSE_CRSE_NUMB AS crs_combo,
SCBCRSE_TITLE as title,
row_number() over (partition by SCBCRSE_SUBJ_CODE,SCBCRSE_CRSE_NUMB ORDER BY SCBCRSE_EFF_TERM DESC) as seqnum
FROM SCBCRSE
) data
WHERE seqnum = 1 AND title LIKE '%' || :srch || '%'
谢谢大家的帮助。我在这上面浪费了几个小时,而你却用小步舞曲回答了它。