SQL - 在1或更多时获取版本

时间:2018-02-10 15:50:07

标签: sql sql-server

我有2个db表 - Article和Article_Version。

文章表:

=====ID====|======Date_Added=====|==================Link===================
      1           01/01/2018          www.guardian.co.uk/sports/abc.html
      2           07/01/2018          www.guardian.co.uk/sports/def.html
      3           02/01/2018          www.guardian.co.uk/sports/abc.html

ArticleVersion:

=====Id=====|=====DateAdded=====|=====ArticleId=====|=====Version=====
     1             01/01/2018             1                1
     2             07/01/2018             2                1
     3             02/01/2018             3                2

现在我正在尝试构建一个查询,在这里我可以获得包含多个版本的任何文章的所有文章转换的列表。我的C#代码散列值以了解版本号是否增加。

我需要帮助编写查询以返回包含多个版本的任何文章的所有文章撤销列表。

我有这个,但它没有返回正确的结果

SELECT ArticleVersion.*,Article.link 
FROM ArticleVersion
JOIN Article ON Article.Id=ArticleVersion.ArticleId
WHERE VERSION > 1;

如果我出错了,请有人帮忙吗?

2 个答案:

答案 0 :(得分:0)

你想要所有版本。想到一个窗口函数:

SELECT av.*, a.link 
FROM Article a JOIN
     (SELECT av.*, COUNT(*) OVER (PARTITION BY av.ArticleId) as cnt
      FROM ArticleVersion av
     ) av
     ON a.Id = av.ArticleId
WHERE cnt > 1;

由于过滤,您的查询版本错过了第一个版本。

答案 1 :(得分:0)

你可以试试这个。

SELECT AV.*, A.link 
FROM ArticleVersion AV
JOIN Article A ON A.Id=AV.ArticleId
WHERE 
    EXISTS( SELECT * FROM ArticleVersion AV2 
        WHERE AV2.ArticleId = AV.ArticleId
            AND AV2.Id <> AV.Id )
相关问题