首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写SQL脚本时遇到问题

编写SQL脚本时遇到问题
EN

Stack Overflow用户
提问于 2011-12-03 00:24:38
回答 1查看 90关注 0票数 3

我正在尝试编写一些SQL来自动从数据库中删除一些记录,但我在逻辑上遇到了一些问题,我想看看是否有人可以帮助我完成这个查询。

基本上,我有一个名为image的表。在image中有一个列,其中包含主ID、辅助ID、类型、年份和日期。

主ID可以具有多个辅助ID,因此这意味着具有不同辅助ID的同一主ID的多个行。每个辅助ID肯定有两行,一种是小的,一种是大的。一些辅助ID有重复的数据,所以可能有6行(任意选择一个数字),这意味着每种类型中的一种小的和大的对于单个主ID的单个辅助ID重复3次。所有这些都可以在一年内重复,然后在下一年重复。

这很难理解,所以让我创建一些数据的可视化示例。我不擅长格式化,所以数据行的顺序将像我在上面输入的一样,主ID,辅助ID,类型,年份和日期。

例如:

代码语言:javascript
运行
复制
1000 3000 Small 2010 2010-11-28
1000 3000 Large 2010 2010-11-28
1000 3000 Small 2010 2010-11-29
1000 3000 Large 2010 2010-11-29
1000 3000 Small 2011 2010-11-30
1000 3000 Large 2011 2010-11-30

1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2011 2010-11-28
1000 3001 Large 2011 2010-11-28

您可以看到,具有相同日期和年份的单个辅助ID可能存在重复数据。还有一些数据可能基于相同的辅助ID和年份而重复,即使日期是休息日或只是日期不同。

基本上,我需要的是一个查询,它将遍历一个充满了像这样的数据的表,并删除不需要的坏记录。

我只想要两个记录,一个小的和大的,对于每个辅助ID,对于每个年份(而不是日期),对于这个映像表中的每个主ID,保留最新的日期。

因此,例如,我希望在运行此脚本后留下以下记录:

代码语言:javascript
运行
复制
1000 3000 Small 2010 2010-11-29
1000 3000 Large 2010 2010-11-29
1000 3000 Small 2011 2010-11-30
1000 3000 Large 2011 2010-11-30

1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2011 2010-11-28
1000 3001 Large 2011 2010-11-28

同样,这只是单个主ID和几个辅助ID的示例,此表中可能有x个主ID。

我该如何编写一个查询,按照我的示例的定义删除这个image表中的多余行呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-03 00:32:46

代码语言:javascript
运行
复制
WITH cteRowNums AS (
    SELECT MainId, SecondaryId, Type, Year, DateColumn,
           ROW_NUMBER() OVER(PARTITION BY MainId, SecondaryId, Type, Year ORDER BY DateColumn DESC) AS RowNum
        FROM image
)
DELETE FROM cteRowNums
    WHERE RowNum <> 1;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8359393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档