关键词:
【中文标题】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张桌子的... 查看详情