- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是填充导出的每日表(源自源表prices_daily)中的最后两列。
(源表)prices_daily:
sequence INT(11) NO PRI AUTO_INCREMENT
symbol VARCHAR(6) NO MUL
date DATE NO MUL
high DECIMAL(8,2) YES
low DECIMAL(8,2) YES
close_adj DECIMAL(8,2) YES
(目标表)衍生_每日:
symbol VARCHAR(6) YES
date DATE NO
mov_avg10 DECIMAL(8,2) YES
std_dev10 DECIMAL(8,2) YES
range_daily DECIMAL(8,2) YES
range_std_dev30 DECIMAL(8,2) YES
我可以使用以下代码填充前 4 列:
INSERT INTO derived_daily(symbol, date, mov_avg10, std_dev10)
(
SELECT t1.symbol, t1.date, AVG(t2.close_adj) AS mov_avg10, STDDEV(t2.close_adj)
AS std_dev10
FROM prices_daily t1 LEFT OUTER JOIN prices_daily t2
ON t2.symbol = t1.symbol AND (t1.sequence - t2.sequence)BETWEEN 0 AND 9
WHERE t1.symbol = 'C' GROUP BY t1.date
) ;
但是当我尝试用以下内容填充派生表中的“range_daily”时:
INSERT INTO derived_daily(symbol, date, range_daily)
(
SELECT t2.symbol, t2.date, (high - low) AS range_daily
FROM prices_daily t1
LEFT OUTER JOIN derived_daily t2
ON t2.symbol = t1.symbol AND t2.date = t1.date
WHERE t2.symbol = 'C'
ORDER BY t2.date
) ;
它将其放置在正确的列中,但位于表底部的新行中,而不是包含丢失数据的现有行(range_daily 和最终的 range_std_dev30)。我已经尝试了一些调整,主要是“错误 1364,字段“日期”没有默认值。我想填充最后两列以与我已经放置在表中的内容相匹配(相同行),而不是底部的新行。
我花了很长时间查看相关问题/答案,但仍然无法与我的问题相关(菜鸟...抱歉)。任何帮助/建议/等。将不胜感激!附:正在努力适本地格式化问题,但必须来到主要位置(该网站位于顶部),因为我感到沮丧,哈哈。
谢谢,汤姆
最佳答案
我认为您想要更新现有行,而不是插入新行。
例如:
UPDATE ( SELECT t1.symbol
, t1.date
, AVG(t2.close_adj) AS mov_avg10
, STDDEV(t2.close_adj) AS std_dev10
FROM prices_daily t1
LEFT
JOIN prices_daily t2
ON t2.symbol = t1.symbol
AND (t1.sequence - t2.sequence) BETWEEN 0 AND 9
WHERE t1.symbol = 'C'
GROUP
BY t1.symbol
, t1.date
) s
JOIN derived_daily t
ON t.symbol = s.symbol
AND t.date = s.date
SET t.mov_avg10 = s.mov_avg10
, t.std_dev10 = s.std_dev10
为了进行测试,您可以将 UPDATE
关键字替换为 SELECT t.symbol, t.date, t.mov_avg10, t.std_dev10, s.mov_avg10, s.std_dev10 FROM
并删除末尾的 SET
子句。这将列出 t 中将要更新的行、行中的现有值以及将分配的新值。
跟进
要获取插入的所有列,您可以组合三个查询。这是一个巨大的查询,但是一旦我们将其分解为各个组成部分,它就有意义了。
INSERT INTO derived_daily
( symbol
, `date`
, mov_avg10
, std_dev10
, range_daily
, range_std_dev30
)
SELECT q.symbol
, q.date
, q.mov_avg10
, q.std_dev10
, r.range_daily
, s.range_std_dev30
FROM ( SELECT t1.symbol
, t1.date
, AVG(t2.close_adj) AS mov_avg10
, STDDEV(t2.close_adj) AS std_dev10
FROM prices_daily t1
LEFT
JOIN prices_daily t2
ON t2.symbol = t1.symbol
AND (t1.sequence - t2.sequence) BETWEEN 0 AND 9
WHERE t1.symbol = 'C'
GROUP BY t1.symbol, t1.date
) q
LEFT
JOIN ( SELECT t3.symbol
, t3.date
, (t3.high - t3.low) AS range_daily
FROM prices_daily t3
WHERE t3.symbol = 'C'
-- GROUP BY t3.symbol, t3.date
) r
ON r.symbol = q.symbol
AND r.date = q.date
LEFT
JOIN ( SELECT t4.symbol
, t4.date
, STDDEV(d.range_daily) AS range_std_dev30
FROM prices_daily t4
LEFT
JOIN ( SELECT t5.symbol
, t5.date
, (t5.high - t5.low) AS range_daily
FROM prices_daily t5
WHERE t5.symbol = 'C'
-- GROUP BY t5.symbol, t5.date
) d
ON d.symbol = t4.symbol
AND d.date >= t4.date
AND d.date <= t4.date + INTERVAL -30 DAY
WHERE t4.symbol = 'C'
GROUP BY t4.symbol, t4.date
) s
ON s.symbol = q.symbol
AND s.date = q.date
ORDER BY q.date, q.symbol
<小时/>
该查询本质上是这样的形式
INSERT INTO target
SELECT q.key
, q.val
, r.val
, s.val
FROM q
LEFT
JOIN r ON r.key = q.key
LEFT
JOIN s ON s.key = q.key
这假设 (symbol,date)
在(源)prices_daily
表上是唯一的,并且在(目标)衍生_daily< 上也是唯一的
表。
为了进行测试,我们可以运行分别提供 q、r 和 s 值的查询。
我尝试了 range_std_dev30...STDDEV 的公式,计算从当前日期到 30 天的范围值。
(我对使用 AUTO_INCRMENT 序列来派生过去 10 行感到有点困扰......我们通常不依赖于保证 auto_increment id 值将是连续且没有间隙的。这是我们观察到的,但不能保证行为,特别是在以不同的顺序插入行的情况下。
(对于这 30 天,我使用了日期范围比较。)
关于mysql - 将源表中的选择查询结果插入派生表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626328/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!