我有一个名为MyDB的MySQL数据库,我在其中存储每日股价一个名称数据中的423家公司。表数据具有以下列:
`epic`, `date`, `open`, `high`, `low`, `close`, `volume`
epic
和date
是主要键对。我每天使用通常有423行的CSV文件更新数据表数据都具有相同的日期。但是,在某些日子价格可能不可用对于所有423家公司和特定史诗和日期对的数据不更新。为了确定丢失的对,我已经求助于将史诗的完整列表与不完整的史诗列表进行比较两个具有不同日期的简单选择查询,然后使用文件比较器,因此揭示缺失的史诗。这不是一个非常令人满意的解决方案,到目前为止我无法构建一个查询,可以识别任何史诗在任何特定的一天都没有更新。
SELECT `epic`, `date` FROM `data`
WHERE `date` IN ('2019-05-07', '2019-05-08')
ORDER BY `epic`, `date`;
产生成对的值:
`epic` `date`
"3IN" "2019-05-07"
"3IN" "2019-05-08"
"888" "2019-05-07"
"888" "2019-05-08"
"AA." "2019-05-07"
"AAL" "2019-05-07"
"AAL" "2019-05-08"
在这种情况下,AA。尚未在2019-05-08更新。问题在于,发现不是一对的值并不容易。对此问题的任何帮助将不胜感激。
您可以在EPIC上进行COUNT
,并在该日期范围内使用GROUP BY
EPIC,并查看您是否在COUNT
少于2的情况少于2,如果列名称上的语法不正确,请原谅我,我在SQL Server中工作,但是查询的逻辑仍然适用于您。
SELECT x.epic
FROM
(
SELECT COUNT(*) AS UpdateCount, epic
FROM data
WHERE date IN ('2019-05-07', '2019-05-08')
GROUP BY epic
) AS x
WHERE x.UpdateCount < 2
假设您只想检查上载的最后日期,以下几个未更新的每个项目在2019-05-08:
SELECT last_updated.epic, last_updated.date
FROM (
SELECT epic , max(`date`) AS date FROM `data`
GROUP BY 'epic'
) AS last_updated
WHERE 'date' <> '2019-05-08'
ORDER BY 'epic'
;
或在任何上传日期,以下内容将与整个数据库进行比较,因此您不依赖于每个Epic Row的'2019-08-07'。IE。如果史诗之前在数据库中,则如果未更新,它将显示:
SELECT d.epic, max(d.date)
FROM data as d
WHERE d.epic NOT IN (
SELECT d2.epic
FROM data as d2
WHERE d2.date = '2019-05-08'
)
GROUP BY d.epic
ORDER BY d.epic