这就是我想要做的。假设我有这张桌子t:
key_id | id | record_date | other_cols
1 | 18 | 2011-04-03 | x
2 | 18 | 2012-05-19 | y
3 | 18 | 2012-08-09 | z
4 | 19 | 2009-06-01 | a
5 | 19 | 2011-04-03 | b
6 | 19 | 2011-10-25 | c
7 | 19 | 2012-08-09 | d
对于每个ID,我想选择包含最小record_date的行。所以我会得到:
key_id | id | record_date | other_cols
1 | 18 | 2011-04-03 | x
4 | 19 | 2009-06-01 | a
我看到的唯一解决方案是假定所有record_date条目都是不同的,但在我的数据中并非如此。使用带有两个条件的子查询和内部联接将为我提供某些ID的重复行,这是我不想要的:
key_id | id | record_date | other_cols
1 | 18 | 2011-04-03 | x
5 | 19 | 2011-04-03 | b
4 | 19 | 2009-06-01 | a
怎么样:
SELECT mt.*
FROM MyTable mt INNER JOIN
(
SELECT id, MIN(record_date) AS MinDate
FROM MyTable
GROUP BY id
) t ON mt.id = t.id AND mt.record_date = t.MinDate
这将获取每个ID的最短日期,然后基于这些值获取值。唯一的重复项是同一ID的最小record_dates重复。
问题内容: 在我有一个像这样的表的情况下: 我只想为每个工作人员(用staff_id表示)选择一个记录,列出他们的主要技能,用mainskill中的(1)表示。如果没有主要技能,我想退还该工作人员的任何技能记录。例如: 查询应返回: 我尝试了分组,DISTINCT等的各种组合,但无法获得我想要的输出。任何帮助表示赞赏。 问题答案: SQL Server 2005+,使用CTE: SQL Serve
问题内容: 我想查找一位讲师在特定年份教过多少个模块,并想要选择该讲师的姓名和该讲师的模块数。 问题在于,因为我正在选择,并且必须按名称对其进行分组才能使其正常工作。但是,如果有两个讲师姓名相同,该怎么办?然后,sql将使它们合而为一,这将是错误的输出。 因此,我真正想做的是选择,但选择group by ,而sql不允许我这样做。有办法解决吗? 下表是: 到目前为止,这是我的查询: 问题答案:
我有ES索引,其中包含以下格式的文档,这些文档使用Fluentd解析器从日志中解析,并在ES中索引。记录格式: {"id":"id1","field 1":"f1_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 2":"f2_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 3":"f3_val","
问题内容: 我有一个Access 2010数据库,其中存储源计算机和目标计算机的IP地址。如果我的数据库中有以下条目 是否有任何查询来选择唯一对?也就是说,查询的输出应为 问题答案: 您的问题似乎暗示两件事: 列出源/目标对时,您只想查看一个方向上的对,例如(A,B),而不是(B,A)。 该列表应省略源和目标相同的对,例如(D,D) 在这种情况下,查询… …针对包含…的[SomeTable]运行时
问题内容: 我有包含以下字段的表: 如何创建SQL,请选择按ID,DATE_FROM,DATE_TO对结果进行分组并从价格中选择最低的值。 所以结果是 问题答案:
问题内容: 所以这是我的设置,我有2个具有以下(简化)模式的旧表和新表 我正在寻找一种SQL查询,该查询返回以下内容,但在1个查询中包含4列,而不是每个2列包含2个查询 因此,我理想的结果集将包含4列: 谢谢! 问题答案: 您是否尝试过JOIN语句: