SQL Select min(date) group by 对应的行

Posted

技术标签:

【中文标题】SQL Select min(date) group by 对应的行【英文标题】:SQL Select min(date) group by with corresponding row 【发布时间】:2021-05-03 07:27:45 【问题描述】:

父集的一些子集带有发布日期。而且我希望最早的发布日期带有子集的编号,但在一个组库中。

我试试这个:

SELECT Sub_No,Parent_No,MIN(DATE)
FROM mytable
WHERE other_CODE IS NULL
GROUP BY Sub_No,Parent_No
ORDER BY Parent_No DESC

但我明白了:但我只想要最早发布的一个作为 2015-02-12 的 Sub_No 和 Parent_No。

任何帮助将不胜感激!

Parent_No   (No column name)    Sub_No
07  2015-02-12  90
07  2015-11-03  88
07  2017-02-06  59

【问题讨论】:

用您正在使用的数据库标记您的问题。 【参考方案1】:

您可以按如下方式使用NOT EXISTS

SELECT Sub_No,Parent_No,DATE
FROM mytable t
where other_CODE IS NULL
  and not exists (select 1 from mytable tt
  where tt.Parent_No = t.Parent_No and tt.date < t.date
     and tt.other_CODE is null)
  

如果你的数据库支持解析功能,那么你可以如下使用:

select Sub_No,Parent_No, DATE from
(SELECT Sub_No,Parent_No, DATE,  
       row_number() over (partition by parent_no order by date) as rn
FROM mytable
WHERE other_CODE IS NULL) t
where rn = 1

【讨论】:

感谢您的帮助!我尝试了第二个并且它起作用了,因为我的表格有很多带有很多行的连接表格,所以使用第一个可能会让人感到困惑。但是我可以问第二个如何工作吗? rn 是指总行数吗?【参考方案2】:

只有当 Parent_No 和 DATE 是 mytable 的唯一键时,你才可以这样做:

SELECT * FROM mytable
INNER JOIN
(
SELECT Parent_No,MIN(DATE) as MinDate
FROM mytable
WHERE other_CODE IS NULL
GROUP BY Parent_No
) AS Filter 
on mytable.Parent_No = Filter.Parent_No and mytable.DATE = Filter.MinDate

【讨论】:

感谢您的帮助!仍在尝试这种方法,因为我的表有很多连接的,它包含很多行..

以上是关于SQL Select min(date) group by 对应的行的主要内容,如果未能解决你的问题,请参考以下文章

基于时间的过滤器然后得到 Min(date) SQL

SQL 子查询:如何用 min(date) 和 min(hour) 绘制记录

SQL: first_value(), 获取视频的 min_date

SQL - 多 SELECT 和 GROUP BY 以获取表的 MIN(value)

使用 MIN() 和 GROUP BY [重复] 时,SQL SELECT 的行为不符合预期

LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)