Sql 获取两个表之间的最新记录

Sql 获取两个表之间的最新记录,sql,sql-server-2008,Sql,Sql Server 2008,这是这个的延续。我整个周末都在研究这个问题,但没有解决它。我完全被难住了。本质上,我继承了一个有趣的表结构。此表结构如下所示: 分组表 * ID * Name * Description 分组项目 * ID * GroupID * Name * CreatedBy * CreationDate OpenGroupItem * ID * GroupID * Name * CreatedBy * CreationDate 我需要获取由特定用户创建的三个最近的GroupItem元素。这一转变带来

这是这个的延续。我整个周末都在研究这个问题,但没有解决它。我完全被难住了。本质上,我继承了一个有趣的表结构。此表结构如下所示:

分组表

* ID
* Name
* Description
分组项目

* ID
* GroupID
* Name
* CreatedBy
* CreationDate
OpenGroupItem

* ID
* GroupID
* Name
* CreatedBy
* CreationDate
我需要获取由特定用户创建的三个最近的GroupItem元素。这一转变带来了与GroupID相关的需求。我检索的三个GroupItem元素必须至少有一个其他GroupItem元素具有相同的GroupID。第二个问题是组中的其他项可能在OpenGroupItem中

换句话说,我试图检索最近的三个GroupTable,它们在组中至少有两个项。项目可以在GroupItem或OpenGroupItem中。问题是至少有一个项目必须是由特定用户创建的


我不知道如何在SQL中实现这一点。我使用的是SQL Server 2008,我一直在做短文。

我的第一个建议是修复数据库结构。不需要将它们放在具有相同结构的两个表中。一个带有字段以指示是否打开的表是更好的设计。为了防止破坏,您可以将该表命名为新的名称,然后为GroupItem创建一个与该表同名的视图,并为OpenGroupITem创建一个视图,该视图只为您添加的每个基于onteh字段选择所需的记录。如果存在这样的情况,您还需要更改将记录从打开状态移动到未打开状态的过程

一旦完成,查询数据就变得很简单了


如果不能做到这一点,最好的解决方案是将所有两个表合并在一起,然后进行查询。如果您必须经常执行这种类型的查询,请将UNOALL设置为一个视图。如果这是一种罕见的情况,请将其设置为派生表或CTE或temp表。

如果您要开始一个新问题,那么您可能希望接受另一个问题的答案之一,以便我们知道您将选择哪个方向。另外,这是礼貌之举。或者,改变你之前的问题,指出为什么这些解决方案不适合你。完成。我不是想表现得粗鲁。只关注眼前的问题: