我有一个数据库,跟踪上市公司高管出售的股票。我正在尝试创建一个查询,在这里我可以识别出10年或更长时间内首次出售股票的任何高管(并识别他们出售股票的日期)。这个数据库可以追溯到20多年前。
名为“fact\u insider\u sales”的表有几列数据。以下是相关列的部分列表:
身份证件
股票代码
股票id(股票名称)
申报人id(主管姓名)
关系id(主管职务)
交易日期(出售日期)
股份(当日卖出多少股)
有时候,一个主管经常销售,有时候他们很少销售。该表仅在高管出售任何数量的股票时捕获数据,并捕获他/她出售股票的日期。我试图使用的相关列进行此查询是“transaction\u date”,而“transaction\u date”数据的格式是“yyyy-mm-dd”
本质上,我是在试图识别数据库整个历史中的任何一个交易日期,该高管在10年或更长时间内第一次出售了该数据库。
我曾考虑过使用max()和min()函数以及datesub(),但我似乎无法找到正确的逻辑,以便在更广泛的数据库中找到数据在何处满足这个离散时间间隔。我的所有其他查询都集中在近期的最新销售活动上,使用像下面这样的编码语言跟踪最近30天的销售(这不适用于此目的):
a.transaction_date >= date_sub(curdate(), INTERVAL 30 Day)
以下是迄今为止我无法完成的查询:
SELECT
e.stock_name,
e.stock_id,
f.ticker_id,
f.ticker_name,
a.transaction_date,
d.filer_name,
b.relationship_name,
b.relationship_id
FROM fact_insider_sales as a
join dim_relationship as b ON (a.relationship_id = b.relationship_id)
join dim_filer as d on (a.filer_id = d.filer_id)
join dim_stock as e on (a.stock_id = e.stock_id)
join dim_ticker as f ON (a.ticker_id = f.ticker_id)
WHERE a.transaction_date ???????????????????????????????
and b.relationship_name IN ('CEO', 'CB')
任何人都能提供他们的专业知识来创建正确的逻辑并使这个事务日期时间段正确吗?提前谢谢!
2条答案
按热度按时间sgtfey8w1#
如果要查询从当前日期起10年后的数据,可以使用:
这将给你所有的交易10年前,但仍然没有显示你的第一次。为此,您将需要一个子查询来按executive查找特定的数据。
现在将此查询作为表包含在原始查询中:
bihw5rsg2#
使用此查询,您可以像我的示例中那样从中创建一个视图,也可以简单地将查询加入到
FROM
条款:单击此处查看dbfiddle示例
创建列出每个
filer_id
出售,以及与下一个最老的transaction_date
为了这个filer_id
:然后在查询中加入视图,只需选择
id
在哪里year_diff
is>=10年: