我有一个名为“数据”的SQL表,日期在第一列,第二列中的数字值每天更新。
我想根据第二列中的值查看某些日期,并创建一个新表格,将所有日期组合显示为两列,包括计算的天差列。
创建的表需要在“数据”表更新时自动更新。
任何帮助都将不胜感激。
答案 0 :(得分:1)
考虑同一个表上的CROSS JOIN
数据,避免反向重复和相同的日期:
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
CROSS JOIN Data d2
WHERE d1.`Date` < d2.`Date`
AND d1.`Value` = 100 AND d2.`Value` = 100
与INNER JOIN
和ON
子句等效:
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
INNER JOIN Data d2
ON d1.`Value` = d2.`Value`
AND d1.`Value` = 100
AND d1.`Date` < d2.`Date`
并包含在新表格中,构建表格, Table100 ,并使用上面的选择查询运行INSERT INTO ... SELECT
。 NOT EXISTS
子句中的WHERE
是为了避免重复行。
-- RUN ONLY ONCE
CREATE TABLE Table100 (
`Date1` Date,
`Date2` Date,
`Days` Integer
);
-- RUN AFTER EACH Data UPDATE
INSERT INTO Table100 (Date1, Date2, Days)
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
INNER JOIN Data d2
ON d1.`Value` = d2.`Value`
AND d1.`Value` = 100
AND d1.`Date` < d2.`Date`
WHERE NOT EXISTS
(SELECT 1 FROM Table100 t
WHERE t.`Date1` = d1.`Date`
AND t.`Date2` = d2.`Date`);
答案 1 :(得分:0)
查看您的数据,我认为您需要以下内容:
select t1.date as date1, t2.date as date2, datediff(t1.date, t2.date) as days
from table1 t1
cross join table2 t2
where t1.value = 100 and t2.value = 100
and t1.date <> t2.date
我们现在有两个版本,Parfait我相信它会起作用。我的不同之处在于,它提供了前瞻性和后瞻性的所有日期组合,最后一行and t1.date <> t2.date
(可选)消除了当天的组合。 Parfait只是前瞻性的而且我的钱在他身上:)
我希望这会有所帮助。