I have two tables 1- `FormTemplate` where the columns are Id, CreatedDate, Creator, Schema and 2 - `FormSubmissions` where the columns are Id, FormTemplateId(Foreign key), Created Date, Creator.

FormTemplate

| Id         | CreatedDate            | Creator | Schema  |
|------------|------------------------|---------|---------|
|          1 | 2023-01-25 00:52:43.717| John    | {}      |
|          2 | 2023-01-25 00:52:43.717| Same    | {}      |
|          3 | 2023-01-25 00:52:43.717| Alee    | {}      |

FormSubmission

| Id     | FormTemplateId (Foreign key)|  CreatedDate           |   Creator  | 
|--------|-----------------------------|------------------------|------------|
|      1 |                            2| 2023-05-25 00:52:43.717|       Kyle |
|      2 |                            2| 2023-02-25 00:52:43.717|      Kayla |
|      3 |                            3| 2019-03-08 00:52:43.717|     Arthur |
|      4 |                            3| 2019-02-25 00:52:43.717|      Milli |

我想要所有的FormTemplate排,最新的FormSubmission排是6个月前的.在上表中:我应该只获得FormTemplate中的第3行(ID=3

我无法创建查询,也无法找到有效获取具有此条件的FormTemplates的方法.

推荐答案

您还可以使用预分组联接.

SELECT
  t.*,
  s.*
FROM FormTemplate t
JOIN (
    SELECT
      s.FormTemplateId,
      MaxCreated = MAX(s.CreatedDate)
    FROM FormSubmission s
    GROUP BY s.FormTemplateId
    HAVING MAX(s.CreatedDate) <= DATEADD(MONTH, -6, GETDATE())
) s ON t.ID = s.FormTemplateId;

要获取子查询的实际ID,您可以改用带有TOP 1APPLY子查询

SELECT
  t.*,
  s.*
FROM FormTemplate t
CROSS APPLY (
    SELECT TOP (1)
      s.FormTemplateId,
      s.CreatedDate
    FROM FormSubmission s
    WHERE t.ID = s.FormTemplateId
    ORDER BY s.CreatedDate DESC
) s
WHERE s.CreatedDate <= DATEADD(MONTH, -6, GETDATE());

至于其他答案,只要你按t.ID分组,表现几乎肯定是一样的.

Sql相关问答推荐

SQL—如何在搜索的元素之后和之前获取元素?

如何转换和汇总行数

删除MariaDB数据库中的JSON数据

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

从日期开始向前填充重复项

判断序列索引处的序列是否完整

MS Access问题查询中的自定义字段

如何在SQL中从多个查询进行分组

我如何才能在付款人单列中拉出只有9个付款人单的人?

优化Postgres搜索未知长度的子串

获取分布在同一行的列中的出现次数

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

按所选的值将记录分组到不同的列中

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

使用 PL/PGSQL 函数 Select 返回多条记录

使用 regexp_replace 替换所有出现的特殊字符

如何 Select 一列具有最小值而另一列具有给定值的记录?

使用 R 遍历 SQL 查询,每次替换一个变量

SQLite 中的过滤运行总和视图

CURRENT_ROW 窗口框架上的 SQL 滞后