Sql 查询为表中的每个组合返回一条记录

     2023-03-31     292

关键词:

【中文标题】Sql 查询为表中的每个组合返回一条记录【英文标题】:Sql query to return one single record per each combination in a table 【发布时间】:2012-05-05 20:54:43 【问题描述】:

我需要 (from_id, to_id) 的每个组合的结果,它具有最小值和匹配条件的循环。

所以基本上我需要具有最小值的循环。例如从 A 到 B 我需要最小值和 loop_id。

该表有以下字段:

value     from_id   to_id     loop_id
-------------------------------------

2.3         A         B          2

0.1         A         C          2

2.1         A         B          4

5.4         A         C          4

所以结果将是:

value     from_id   to_id     loop_id
-------------------------------------

2.1         A         B          4

0.1         A         C          2

我尝试了以下方法:

SELECT t.value, t.from_id, t.to_id,t.loop_id
FROM myresults t 
INNER JOIN (
     SELECT min(m.value), m.from_id, m.to_id, m.loop_id
     FROM myresults m where m.loop_id % 2 = 0
     GROUP BY m.from_id, m.to_id, m.loop_id
) x
   ON  (x.from_id = t.from_id and x.to_id=t.to_id and x.loop_id=t.loop_id )
   AND x.from_id = t.from_id and x.to_id=t.to_id and x.loop_id=t.loop_id

但它正在返回所有循环。 提前致谢!

【问题讨论】:

从内部派生表中删除 loop_id,因此也将连接到外部查询。然后它将返回每个组合的最小值,并且在外部查询中您可以找到适当的 loop_id。 嗨,Kaj,你有那个查询的例子吗?谢谢 @baboso 这个查询怎么样。 SELECT min(value) as value, from_id, to_id from myresults group BY from_id,to_id @viswanathan-iyer 您的查询将返回所有循环。这也不起作用: SELECT min(value) as value, from_id, to_id, loop_id from myresults where loop_id % 2 = 0 group BY from_id,to_id,loop_id @baboso 那么你想要哪个 loop_id? 【参考方案1】:

据我了解,这将起作用:

SELECT  t.value, t.from_id, t.to_id, t.loop_id
FROM    MyResults t
        INNER JOIN
        (   SELECT  From_ID, To_ID, MIN(Value) [Value]
            FROM    MyResults
            WHERE   Loop_ID % 2 = 0
            GROUP BY From_ID, To_ID
        ) MinT
            ON MinT.From_ID = t.From_ID
            AND MinT.To_ID = t.To_ID
            AND MinT.Value = t.Value

但是,如果 From_ID 和 To_ID 组合的值重复,例如

value     from_id   to_id     loop_id
-------------------------------------

0.1         A         B          2

0.1         A         B          4

这将返回两行。

如果您使用的是 SQL-Server 2005 或更高版本,并且您想要如上所述的重复行,您可以使用:

SELECT  Value, From_ID, To_ID, Loop_ID
FROM    (   SELECT  *, MIN(Value) OVER(PARTITION BY From_ID, To_ID) [MinValue]
            FROM    MyResults
        ) t
WHERE   Value = MinValue

如果你不想要重复的行,你可以使用这个:

SELECT  Value, From_ID, To_ID, Loop_ID
FROM    (   SELECT  *, ROW_NUMBER() OVER(PARTITION BY From_ID, To_ID ORDER BY Value, Loop_ID) [RowNumber]
            FROM    MyResults
        ) t
WHERE   RowNumber = 1

【讨论】:

从 A 到 B,min(value) 为 2.1,loop_id 为 4。您的查询返回连接 A-B 的磨损值和 loop_id 抱歉,我误解了标准。我认为我的编辑会对此进行排序。【参考方案2】:

你不能更简单地做到这一点吗?

SELECT
  from_id,
  to_id,
  MIN(value)
FROM
  myresults
WHERE
  loop_id % 2 = 0
GROUP BY
  from_id,
  to_id

或者我可能误解了这个问题。

编辑:包括 loop_id

SELECT
  m2.from_id,
  m2.to_id,
  m2.value,
  m2.loop_id
FROM
  myresults m2 INNER JOIN
    (SELECT
      m1.from_id,
      m1.to_id,
      MIN(m1.value)
    FROM
      myresults m1
    WHERE
      m1.loop_id % 2 = 0
    GROUP BY
      m1.from_id,
      m1.to_id) minset
  ON
        m2.from_id = minset.from_id
    AND m2.to_id = minset.to_id
    AND m2.value = minset.value

【讨论】:

问题是我还需要获取loop_id。所以这不起作用: SELECT from_id, to_id, MIN(value), loop_id FROM myresults WHERE loop_id % 2 = 0 GROUP BY from_id, to_id, loop_id 哦,没注意到结果中的loop_id。对不起,你是对的。将更新... 查看我对这个问题的评论 - 这得到了正确的行子集,但 OP 也希望查看 loop_id。因此,您需要一个外部查询来显示它,但不使用它来识别相关行 @baboso:您没有指定您使用的 rdbms。例如,如果您使用的是更高版本的 SQL Server,则可以使用 OUTER APPLY 大大简化此操作 您好您的查询正在运行,但不幸的是,如果值相同,则会返回具有不同 loop_id 的重复行。如果值重复,我如何过滤您的查询以仅返回一行(例如 max lopp_id)

SQL 查询每个组 ID 仅返回 1 条记录

】SQL查询每个组ID仅返回1条记录【英文标题】:SQLquerytoreturnonly1recordpergroupID【发布时间】:2009-12-2317:31:15【问题描述】:我正在寻找一种方法来处理以下情况。我有一个数据库表,我只需要为表中包含的每个“组id”返回一条记... 查看详情

SQL查询将列值显示为表中的列名

】SQL查询将列值显示为表中的列名【英文标题】:SQLquerytodisplaycolumnvaluesascolumnnameintable【发布时间】:2019-06-0617:59:07【问题描述】:我有一个来自“问候”表的字段名称“标题”。UI中的Title字段可能是FirstName或LastName或两者的组... 查看详情

Python查询sql db中的最后一条记录,但返回空白记录

】Python查询sqldb中的最后一条记录,但返回空白记录【英文标题】:Pythonqueryinglastrecordinsqldb,butreturningblankrecord【发布时间】:2022-01-2112:14:46【问题描述】:我正在使用PythonFlask和SQLAlchemy创建一个简单的Web应用程序,该应用程序将... 查看详情

(VBA)为表中的每条记录创建一个文件“pdf”

】(VBA)为表中的每条记录创建一个文件“pdf”【英文标题】:(VBA)createafile"pdf"foreachrecordinatable【发布时间】:2020-09-2101:09:18【问题描述】:帮帮我,我编写的这段代码创建了多个文件,但每个文件只包含第一条记录中... 查看详情

为表中的每个 ID 选择最新的 3 条记录

】为表中的每个ID选择最新的3条记录【英文标题】:Selectthelatest3recordsforeachIDinatable【发布时间】:2015-08-2100:11:29【问题描述】:我有一个包含复合主键(ID、Date)的表,如下所示。+--------+------------+--------+|身份证|日期|价值|+----... 查看详情

SQL查询删除表中的相关记录

】SQL查询删除表中的相关记录【英文标题】:SQLQuerytoremoverelatedrecordsintable【发布时间】:2017-05-2623:43:16【问题描述】:我有一个简单的表格,其中包含名称、价格、状态等基本销售信息。对于每个客户交互,它们都被输入到带... 查看详情

从 SQL Server 中的每个表中只复制一条记录

】从SQLServer中的每个表中只复制一条记录【英文标题】:CopyonlysinglerecordfromeachtableinSQLServer【发布时间】:2018-05-1616:43:17【问题描述】:我想将表从一个数据库/服务器复制到另一个数据库/服务器。要求是,在将表复制到目的地... 查看详情

SQL 查询将多条记录中的值组合到单个列中

】SQL查询将多条记录中的值组合到单个列中【英文标题】:SQLQuerytocombinevaluesfrommultiplerecordsintoasinglecolumn【发布时间】:2018-06-2117:12:50【问题描述】:在我的表格中,每条记录最多可以有30个不同的预算代码。我需要一个将表中... 查看详情

Oracle Sql 查询一条记录大数据中的报表

】OracleSql查询一条记录大数据中的报表【英文标题】:OracleSqlqueryforreportinonerecordlargedata【发布时间】:2020-10-1618:04:43【问题描述】:亲爱的我需要为每个员工每个日期的交易数量生成报告每个员工有10条记录,每条记录包括当天... 查看详情

VBA Access SQL SELECT查询只返回一条记录

】VBAAccessSQLSELECT查询只返回一条记录【英文标题】:VBAAccessSQLSELECTQueryonlyreturningonerecord【发布时间】:2012-08-1205:01:04【问题描述】:我在Access2010中使用VBA,但遇到了一个奇怪的问题。我正在尝试从表中提取记录,但我的SELECT查... 查看详情

如何 SQL 为另一个表中的每个 id 插入一条记录? [复制]

】如何SQL为另一个表中的每个id插入一条记录?[复制]【英文标题】:HowcanISQLinsertarecordforeveryidinanothertable?[duplicate]【发布时间】:2016-12-2613:05:35【问题描述】:我已经看到了插入选择,但我只想从第二个表中获取一个值。这是我... 查看详情

SQL查询从链接表中检索最后一条记录[重复]

】SQL查询从链接表中检索最后一条记录[重复]【英文标题】:SQLquerytoretrievelastrecordfromalinkedtable[duplicate]【发布时间】:2016-09-1719:09:06【问题描述】:我编写了一个查询来比较不同表中的2列(TRELAYVSTUSERDEF8)。该查询效果很好,只是... 查看详情

SQL查询用户在表中有一条记录但没有另一条[关闭]

】SQL查询用户在表中有一条记录但没有另一条[关闭]【英文标题】:SQLQueryUserhasonerecordinthetablebutnotanotherone[closed]【发布时间】:2013-09-1913:48:04【问题描述】:我有一个包含员工类型代码的表,我正在尝试返回所有没有特定LeaveType... 查看详情

使用一条sql查询多个表中的记录数

方法一:selectt1.num1,t2.num2,t3.num3from(selectcount(*)num1fromtable1)t1,(selectcount(*)num2fromtable2)t2,(selectcount(*)num3fromtable3)t3方法二:selectsum(t.num1),sum(t.num2),sum(t.num3)from(selectcount(*)n 查看详情

删除sql视图中的重复记录

...iew【发布时间】:2012-12-0722:54:51【问题描述】:我有一个查询从表中返回数据,该表的第1列有重复记录,但其他列中可能有不同的值。我只想将第1列中的每个值的一条记录带入使用标准选择正确记录的视图中。这里是查询;SELE... 查看详情

优化 SQL 查询以返回带有标签的记录

】优化SQL查询以返回带有标签的记录【英文标题】:OptimizingSQLquerytoreturnRecordwithtags【发布时间】:2015-03-2000:11:19【问题描述】:我正在寻求帮助来优化我为SQLServer编写的查询。鉴于此数据库架构:TradeLead对象,此表中的一条记... 查看详情

sql查询以列出数据库中每个表中的记录数和表大小(代码片段)

查看详情

带有逗号分隔结果集的 sql server 子查询

】带有逗号分隔结果集的sqlserver子查询【英文标题】:sqlserversubquerywithacommaseparatedresultset【发布时间】:2012-01-0807:05:27【问题描述】:我需要返回表中的记录,并且我的结果集需要包含一个逗号分隔的列表。我附上了3张桌子的... 查看详情