我有一个包含以下列和数据的表
FldID | Rev | Words
10257 2这里有一些文字
10257 3我改变了这个文本
10258 2另一个项目的更多文本
10258 3虚拟文字
10258 6更多虚拟文本
10259 2样本查询文本
单词是文本数据类型。我想编写一个查询来从上表中提取“字”,以获得FldID与MAX(Rev)的组合
上表输出的均值应为 -
FldID | Rev | Words
10257 3我改变了这个文字
10258 6更多虚拟文本
10259 2样本查询文本
PLS。建议。
由于
答案 0 :(得分:2)
with c as(
select FldId, Rev, Words
, row_number() over (partitioned by FldId order by Rev desc) as rn
from table)
select FldId, Rev, Words
from c
where rn =1;
答案 1 :(得分:0)
;WITH Q as (
SELECT MAX(Rev) as Rev, FldID
FROM t
GROUP BY FldID
)
SELECT t.Words, Q.FldID, Q.Rev
FROM t
INNER JOIN Q
ON t.FldID = Q.FldID
AND t.Rev = Q.Rev
答案 2 :(得分:0)
Select words from table where (FldId, rev) in (
Select FldId, max(rev)
from table
group by FldId);
回答评论:我就是这样做的。我总是从内到外考虑这些。所以我问的第一个问题是“如何获得每个FldId的最大修订版号?”然后我写了一个查询给我。
Select FldId, max(rev)
from table
group by FldId;
一旦我知道了,我就需要找到与该版本一致的词语。所以我添加了第一行来获取与FldId,rev组合匹配的单词。
更一般地说,在复杂的查询中,我将使用一堆嵌套查询来思考整个事情,直到我得到我想要的答案。然后我将回过头来寻找简化查询的方法。
答案 3 :(得分:0)
你可以用这样的子查询来做到这一点:
SELECT
t1.*
FROM TBL t1
INNER JOIN (
SELECT
FldId,
MAX(REV) AS MAXREV
FROM TBL
GROUP BY
FldId
) t2
ON t2.FldId = t1.FldId
AND t2.MAXREV = t1.REV
您也可以使用CTE进行此操作:
;WITH CTE AS (
SELECT
FldId,
REV,
Words,
ROW_NUMBER() OVER (PARTITION BY FldId ORDER BY REV DESC) AS RowNumber
FROM TBL
)
SELECT
FldId,
REV,
Words
FROM CTE
WHERE RowNumber = 1
答案 4 :(得分:0)
select t.FldID,t.Rev,t.Words from @t t
join(
select FldID,maxRev=MAX(Rev) from @t
group by FldID)x
on t.FldID = x.FldID and t.Rev = x.maxRev
order by t.FldID