如何从跨两个 DATE 列的 INNER JOIN 创建 MIN 和 MAX 日期列,其中每个 DATE 列来自单独的表 BigQuery
Posted
技术标签:
【中文标题】如何从跨两个 DATE 列的 INNER JOIN 创建 MIN 和 MAX 日期列,其中每个 DATE 列来自单独的表 BigQuery【英文标题】:How to create MIN and MAX date columns from an INNER JOIN across two DATE columns where each DATE column is from a separate table BigQuery 【发布时间】:2021-06-17 12:40:31 【问题描述】:这是一个让我发疯的问题!
我想通过跨三个表的内部连接为每个唯一的 person_id 创建一个 MIN 列和一个 MAX 列,这些表具有两个单独的 DATE 列 - 一个在 tbl1 中,一个在 tbl2 中(表 3 只是基于 person_id 的连接)。我确定这只是我编写查询的顺序,但我不知道在哪里放置 tbl2 中的 DATE 列。
简而言之,无论 MIN 日期来自 tbl1 和 tbl2 的组合 DATE 列,都将形成 start_date,而无论 MAX 是什么,都将形成 end_date。两者都是日期,格式都是:YYYY-MM-DD,所以不用担心。
当我只想查找 tbl1 DATE 列的 MAX 和 MIN 日期时,这是一个示例查询:
SELECT tbl1.person_id, MIN(tbl1.Date) AS start_date, MAX(tbl1.Date) AS end_date,
FROM `database_name.table_name1` tbl1
inner join `database_name.table_name2` tbl2
ON (
tbl1.person_id = tbl2.person_id
)
inner join `database_name.table_name3` tbl3
ON (
tbl1.person_id = tbl3.person_id
)
GROUP BY tbl1.person_id
提前谢谢你
【问题讨论】:
【参考方案1】:你似乎想要least()
和greatest()
:
SELECT tbl1.person_id,
LEAST(MIN(tbl1.Date), MIN(tbl2.Date)) AS start_date,
GREATEST(MAX(tbl1.Date), MAX(tbl2.Date)) AS end_date,
FROM `database_name.table_name1` tbl1 JOIN
`database_name.table_name2` tbl2
ON tbl1.person_id = tbl2.person_id JOIN
`database_name.table_name3` tbl3
ON tbl1.person_id = tbl3.person_id
GROUP BY tbl1.person_id
【讨论】:
这太棒了,非常感谢您的快速响应 - 我花了很长时间才弄清楚这一点。如果我可以附加问题 - 如果我想从第一行的表中选择其他列 - 例如另一个标识符或与最小或最大日期关联的事件 - 我收到以下错误消息:SELECT list expression references Assmnt.AssessType 既不分组也不聚合 - 我应该将它们放在其他地方吗? @Raven52 。 . .这回答了您在此处提出的问题。如果您有不同的问题,请提出一个新问题。需要一个明确的解释。样本数据和期望的结果非常有帮助。 谢谢,会做的。以上是关于如何从跨两个 DATE 列的 INNER JOIN 创建 MIN 和 MAX 日期列,其中每个 DATE 列来自单独的表 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 SQL 表中获取两个不同列的匹配数据:Inner Join 和/或 Union?
IN SQL INNER JOIN 可以添加两个不同列的表吗?