我需要提取和迁移值从一个表到另一个。源表包含一个特定的生效日期的sumarated值。如果一个值被更改,如果组件值上的数据从此生效日期开始有效,则会写入新行。
我现在需要将这些数据迁移到这样的新表中。我们的目标是,选择给定月份的数据,结果就是给定该月份的有效数据。
每行表示在一个月内有效的组件的值。我现在通过将其设置为参数来运行每个有效月份的插入更新。我插入值变化作为新的行到表中,通过使用唯一的键(entity_id,effective_date,component_type)防止重复
SET @effective_date = '2020-01-01';
INSERT INTO component_final
select NULL,
source_id,
entity_id,
effective_date,
NULL,
1,
component_1
FROM component_source
WHERE effective_date = @effective_date
AND component_1>0;
迁移第一行后,应该是这样的结果
SET @effective_date = '2020-05-01';
INSERT INTO component_final
select NULL,
source_id,
entity_id,
effective_date,
NULL,
1,
component_1
FROM component_source
WHERE effective_date = @effective_date
AND component_1>0;
迁移第二行后,应该是这样的结果
因此,如果将来有值变化,必须设定结束日期。
如果组件将来发生更改,我无法执行第二步,即更新数据。也许在插入具有相同实体和组件的新行后,可以将其作为触发器,但我无法使其工作。
一些想法?我想只在MySQL
里面处理这个。
我知道核心问题是如何找到组件发生变化的source_id
s(0意味着删除,所以我们不希望这些条目出现在结果中),以及如何同时分配相应的结束日期。为了便于说明,我把你的例子简化了一点:
组件类型
(我考虑到可能会有连续的条目,其值不变)实体_id
,所以我们可以忽略它将这个更简单的版本扩展到现实世界的问题应该很容易。
下面是一个示例输入:
您不需要表中的列enddate
component_final,因为它的值取决于同一表中的其他值:
SELECT
id,
source_id,
entity_id,
startdate,
( SELECT DATE_ADD(MIN(cf2.startdate),INTERVAL -1 DAY)
FROM component_final cf2
WHERE cf2.startdate > cf1.startdate
AND cf2.source_id = cf1.source_id
AND cf2.entity_id = cf1.entity_id
) as enddate,
component_type,
value
FROM component_final cf1;
问题内容: 在[成员]表中,某些行的列值相同。 有些人使用了不同的login_id,但是使用了相同的电子邮件地址,因此在此列上未设置唯一约束。现在,我需要查找这些行,并查看是否应将其删除。 我应该使用什么SQL语句查找这些行?(MySQL 5) 问题答案: 此查询将为您提供电子邮件地址及其使用次数的列表,最常用的地址在前。 如果要完整行:
假设我有一个如下所示的数据框,我需要识别每行,其中一个或多个缺失值 (NA) 后跟至少一个有效值(任何数字)。你可以帮我吗?
问题内容: 我在从表中显示正确的数据时遇到了麻烦。我不太确定要搜索什么。我不确定min(column)或max(column)在这里对我有帮助。让我们看看我是否可以解释我的问题。 我的表包含以下数据: 我将以一种观点来介绍这一点。它将按代码分组。 我想要的是此输出: 如您所见,DateTo和DateFrom之间是否存在间隙,我希望将其显示为两行。但是,如果具有相同代码的下一个“ DateFrom”
问题内容: 我有这样的桌子 我想获得具有相同发明编号的订单数量总和 那就是想要这样的结果 我们如何编写mysql查询 问题答案: 利用聚合函数并根据进行分组。 GROUP BY子句
问题内容: 我遇到一个问题,当执行两个表的联接时,无法确定mysql查找具有两个特定“标签”和相同“ hashid”的链接 假设我的表看起来像这样: 链接 标签 我想返回同时具有“有用”和“很棒”标签的行 当前(工作/快速)查询,用于按1个标签查找链接: 阅读文章后,我尝试使用以下内容: 这 不 工作,但它是如此令人难以置信的缓慢,因为无法使用。 有人知道解决方案吗? 问题答案: 问题的类型称为
问题内容: 我试图找到具有重复值,但仅基于选定的列数,而不是单个列或整个行的行。例如,如果我的表如下所示: 我的问题是: 查找行的“地址和状态”字段与另一行的“地址和状态”字段匹配的行的所有ID。 该查询的答案将是: 有任何想法吗? 意见建议: 如何从单个表中选择同一行中的多列值 问题答案: 请尝试以下方法: