我正在努力收集一段时间内按地点划分的员工的平均调查分数.由于各种原因,这些人可以随着时间的推移转移位置.我有两张桌子.

Survey_Scores:这张表存放的是个人调查分数.它包含300万行.

示例:

Survey_Date Employee_Number Score (1-4)
1/2/2023 1 3
1/5/2023 2 4

Employee_Info:这张表存放有关员工的信息.此信息可能会随着时间的推移而变化,并且此表中一个人的多行记录将保留此历史记录.它们的行可以通过记录开始日期和记录结束日期列来区分.当记录结束日期为空时,这是他们的最新信息.

显示两名员工在1月4日调换地点的样本:

Employee_Number Location Record_Start_Date Record_End_Date
1 SLC 1/1/2023 1/3/2023
2 TEX 1/1/2023 1/3/2023
1 TEX 1/4/2023 (null)
2 SLC 1/4/2023 (null)

PROBLEM:我需要创建一个从Survey_Scores表开始的视图,但添加了一列,表示员工在Survey_Date之前所属的位置.

我try 连接employee_Number列上的表,但由于这里的多对多关系,在Snowflake中遇到了错误.我理解它为什么不工作,因为它不知道要查看哪一行,所以我想知道是否有什么解决方法可以让它返回那个人在survey_date上的位置.

除了我已经做过的以外,我最初的 idea 是以某种方式在一个if语句中工作,该语句说:如果survey_date介于record_start_daterecord_end_date之间,则返回位置.但我不太确定如何继续实施这一点.

我仍然是SQL的新手,感谢您的帮助,谢谢.

推荐答案

我try 连接Employee_Number字段上的表,但由于此处的多对多关系,在Snowflake中遇到错误

SQL允许连接多个字段/谓词:

SELECT s.*, e.Location
FROM Survey_Scores AS s
LEFT JOIN Employee_Info AS e
  ON s.Employee_Number = e.Employee_Number
 AND s.Survey_Date BETWEEN e.Record_Start_Date 
                       AND COALESCE(e.Record_End_Date, '2999-12-31'::DATE);

Sql相关问答推荐

Postgresql在加入时显示重复的行

如何在SQL查询中只比较日期时间的年份和月份(而忽略日期比较)?

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

Postgres JSONB对象筛选

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

Android房间fts4匹配语法AND OR

LEFT JOIN不显示计数0我期望的方式

最近3个月收到的邮箱总数

导出部分条形码字符串GS1-128

在xml.Modify方法中使用子字符串和可能的替代方法

数据库SQL PARSE_SYNTAX_ERROR

如何根据几个条件 Select 值:如果满足一个范围的SUM,则对另一个范围求和

SQL:如果一个表中的日期在另一个表的日期的12个月内,则为是或否

从给定数据中查找下一个工作日期

聚合内部的条件在哪里?

使用 SQL 计算一年中任意 3 个月期间的总成本

将表格和字符串连接以 for each 记录生成订单项目

使用 R 遍历 SQL 查询,每次替换一个变量

SQL - 使用子查询返回多行的 LIKE 命令

从多个连接返回 1 行到同一个表 - SQL Server