提问人:Tim Wheeler 提问时间:5/11/2023 最后编辑:SkullyTim Wheeler 更新时间:11/15/2023 访问量:71
如何在SQL加入后只返回结果的计算值?
How to only return a calculated value to results after a SQL join?
问:
我有两个表,我只想将查询的开始日期添加到 上的值中。开始日期由语句推导,例如:table2
table1
GROUP BY
表1
编号 | 总结 | 结束 |
---|---|---|
1 | 标题 | 01/01/2023 |
2 | 标题 2 | 02/02/2023 |
表2
编号 | 总结 | 开始 | 家长 ID |
---|---|---|---|
3 | 标题 | 01/10/2022 | 1 |
4 | 标题 2 | 02/10/2023 | 1 |
5 | 标题 3 | 03/10/2023 | 2 |
我希望表 1 的所有内容都只包含表 2 中每个父 ID 的最短开始日期。
我尝试了这样的事情,但我无法返回额外的列,我猜我需要用子句更改一些东西?GROUP BY
SELECT table1.*, t2.Start
FROM table1 INNER JOIN
(
SELECT [Parent ID], min(Start)
FROM table2
GROUP BY [Parent ID]
) t2 ON t2.[Parent ID] = t1.ID
答:
1赞
MAHDI Saghafi Zadeh
5/11/2023
#1
;with a as(
Select row_number() over (PARTITION BY Table1.id order by table2.start) as 'row',table1.*,table2.start)
from table1 left join table2 on table1.id=table2.id)
select * from a where row=1
2赞
Rams
5/11/2023
#2
SELECT t1.*, t2.Start
FROM table1 t1 inner join
(
select [Parent ID], min(Start) as Start
from table2
group by [Parent ID]
) t2 on t2.[Parent ID] = t1.ID
2赞
SelVazi
5/11/2023
#3
另一种方法是使用 和 聚合函数:GROUP BY
min()
select t1.ID, max(t1.Summary) as Summary, max(t1.End) as End, min(t2.Start_) as min_start
from table1 t1
inner join table2 t2 on t1.id = t2.Parent_ID
group by t1.ID
1赞
toha
5/11/2023
#4
另一种解决方案是,而不是使用子句,而是在子查询中获取结果。GROUP BY
SELECT t1.*, (
SELECT min(Start)
FROM table2 t2
WHERE t2.ParentID = t1.ID
)
FROM table1 t1;
评论
1赞
Skully
5/12/2023
请记住,Stack Overflow 不仅旨在解决眼前的问题,还旨在帮助未来的读者找到类似问题的解决方案,这需要了解底层代码。这对于我们社区中不熟悉语法的初学者来说尤其重要。鉴于此,您能否编辑您的答案以包括对您正在做的事情的解释以及您为什么认为这是最好的方法?
1赞
Skully
5/14/2023
这是一个解决方案共享平台,给出答案是其中的一部分,但解释它以让未来的读者了解解决方案的作用同样重要。虽然这不是规则,但强烈建议这样做。
1赞
mathiasrw
11/15/2023
#5
您需要修改子查询以将 包含在选择列表中,以便它可用于联接的外部查询。例:Parent ID
SELECT table1.*, t2.MinStart
FROM table1
INNER JOIN (
SELECT [Parent ID], MIN(Start) as MinStart
FROM table2
GROUP BY [Parent ID]
) as t2 ON t2.[Parent ID] = table1.ID
此查询检索每个相应 .子查询用于计算 中每个 的最小开始日期,然后将此结果联接到列上。table1
table2
Parent ID
Parent ID
table2
table1
ID
评论