我有一个数据库,跟踪上市公司高管出售的股票。我试图创建一个查询,在这里我可以识别出10年或10年以上首次出售股票的任何高管(并识别出他们出售股票的日期)。数据库可以追溯到20多年前。
名为“fact_insider_sales”的表有几列数据。以下是相关列的部分列表:
身份证件
股票代码(股票代码)
股票id(股票名称)
文件管理员id(主管姓名)
关系id(高管头衔)
交易日期(出售日期)
股份(当日售出多少股份)
有时,高管经常出售,有时他们很少出售。该表仅在高管出售任何数量的股份时捕获数据,并捕获他/她出售股份的日期。我试图进行此查询的相关列是“transaction_date”,而“transaction_date”数据的格式是“YYYY-m m-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')

任何人都能提供他们的专业知识来创建正确的逻辑并使这个事务日期时间段正确吗?提前谢谢你!

最佳答案

如果要查询从当前日期10年前开始的日期,可以使用:

WHERE a.transaction_date <= date_sub(curdate(), interval 10 year)

这将给你所有的交易10年前,但仍然没有显示你的第一次。为此,您将需要一个子查询来按executive查找特定数据。
SELECT filer_id,min(transaction_date) AS first_time
FROM fact_insider_sales
WHERE transaction_date <= date_sub(curdate(), interval 10 year)
GROUP BY filer_id

现在将此查询作为表包含在原始查询中:
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 (SELECT filer_id,min(transaction_date) AS first_time
    FROM fact_insider_sales
    WHERE transaction_date <= date_sub(curdate(), interval 10 year)
    GROUP BY filer_id) AS p
  ON a.filer_id=p.filer_id
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 = p.first_time
AND b.relationship_name IN ('CEO', 'CB')

关于mysql - MySQL-如何在数据库的整个历史记录中使用特定的最小时间间隔查找日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50979805/

10-16 14:42
查看更多