查询基于其他列中的MAX值检索Text数据类型列值

时间:2009-12-22 19:56:41

标签: sql sql-server sql-server-2005 tsql

我有一个包含以下列和数据的表

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。建议。

由于

5 个答案:

答案 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