gpt4 book ai didi

mysql - 试图查看数据点是否属于 SQL 的多个日期范围之一

转载 作者:行者123 更新时间:2023-11-30 23:09:15 25 4
gpt4 key购买 nike

我有两个表,一个包含一系列事件,另一个包含有关事件主题的人口统计信息。人口统计数据包括受试者符合事件资格的数据范围,并且事件数据包含具有事件日期的字段。每个主题都有多个日期范围,因为主题经常失去/重新获得资格。有些事件不在受试者的资格期限内,我试图在事件表中添加一列,如果事件在资格期限内则显示“0”,否则显示“1”。

基本上,我的表格是这样的:

            Events
Subject Date of Event
A 1/1/2012
A 3/4/2012
B 2/2/2012
B 3/4/2012

Demographics
Subject Start End
A 1/1/2012 1/15/2012
A 3/1/2012 3/31/2012
B 2/1/2012 2/29/2012
B 4/1/2012 4/30/2012

我运行一个简单的 CASE WHEN 语句,如果事件日期早于开始日期或晚于结束日期,则返回“0”,否则返回“1”。结果是:

  Subject    Date of Event       Start     End         Value
A 1/1/2012 1/1/2012 1/15/2012 1
A 1/1/2012 3/1/2012 3/31/2012 0
A 3/4/2012 1/1/2012 1/15/2012 0
A 3/4/2012 3/1/2012 3/31/2012 1
B 2/2/2012 2/1/2012 2/29/2012 1
B 2/2/2012 4/1/2012 4/30/2012 0
B 3/4/2012 2/1/2012 2/29/2012 0
B 3/4/2012 4/1/2012 4/30/2012 0

我可以获取这些结果并将它们导出到 Excel,然后使用另一个事件标识符执行 VLOOKUP,这将提供我需要的最终结果,但肯定有一种方法可以在我的 SQL 脚本中执行此操作吗?在为其赋值之前,有没有办法通过多个范围检查事件日期?或者在最后删除重复的事件,但有条件地基于分配的值?

编辑:

抱歉,我在最初的问题中没有很好地解释我的情况。我上面显示的第二个表是我现在得到的结果,而不是我想要的结果。我遇到的问题是,在这个数据集中,一个主题可以有多个事件和几个不同的资格期限,我需要检查每个事件以查看它是否属于这些资格期限中的任何一个。这是一个庞大的数据集,所以我更愿意为每个事件获得一个结果,告诉我它是否属于任何受试者的资格窗口。目前,每个事件都与受试者的每个资格期限配对,如果事件落在与该数据点配对的资格期限内,则值为 1。所以我理想的输出实际上是:

          Subject      Date of event     Value
A 1/1/2012 1
A 3/1/2012 1
B 2/2/2012 1
B 3/4/2012 0

就像我说的,我可以通过在 Excel 中使用 VLOOKUP 和我现在得到的不完美的 SQL 结果来获得它,但我想有一种方法可以在 SQL 中获得它。

最佳答案

我的猜测是,对于每个主题/事件,您想知道该主题是否具有人口统计信息。如果是这样,那么你想做一个 left join:

select e.subject, e.eventdate, max(d.start) as start, max(d.end as end),
(max(d.subject) is not null) as value
from events e left join
demographics d
on s.subject = d.subject and
e.eventdate between d.start and d.end
group by e.subject, e.eventdate;

关于mysql - 试图查看数据点是否属于 SQL 的多个日期范围之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20576562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com