- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
三年来,我编写了一个每周迭代的存储过程。但它不起作用,并返回一条模糊的错误消息。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 18
DELIMITER $$
CREATE PROCEDURE loop_three_years()
BEGIN
declare y INT default 2016;
declare m int default 4;
declare d int default 20;
WHILE y <= 2019 DO
WHILE YEARWEEK(concat(y, '-', m, '-', d)) <= 53 DO
WHILE m < 12 DO
WHILE (m = 2 and d <= 29) OR (d <=30 and m in(4, 6,9,11)) OR ( m in(1,3,5,7,8,10,12) AND d <= 31) DO
set d = d + 7;
SELECT YEARWEEK(concat(y, '-', m, '-', d));
END WHILE;
set d=1;
END WHILE;
set m = 1;
SET y = y + 1;
END WHILE;
END
$$
当我将它用作最小部件时,它们可以正常工作,所以我不确定我的重新组装有什么问题。也不确定是否有更好的方法来做到这一点。 (select
只是为了测试,当我使用真正的代码时,它将是一个insert
。
最佳答案
Slightly Altered from a previous solution
您可以使用系统中的任何其他表来构建您自己的动态日历/列表,该表的记录数量至少与伪造行号所需的数量一样多。下面的查询将使用像内联程序和声明一样工作的 MySQL @ 变量。我可以用给定的日期开始列表...例如您的 2016-04-20,然后每次迭代,使用基于日期的函数添加 1 周。我不需要知道或关心 28、29(闰年)、30 或 31 天有多少天。
下面“AnyTableThatHasAtLeast156Records”的表引用就是......数据库中至少有 156 条记录的任何表(每年 52 周,3 年)
select
YEARWEEK( @startDate ) WeekNum,
@startDate as StartOfWeek,
@startDate := date_add( @startDate, interval 1 week ) EndOfWeek
from
( select @startDate := '2016-04-20') sqlv,
AnyTableThatHasAtLeast156Records
limit
156
这将为您提供一个包含 156 条记录的列表(前提是您的“anyTable…”一次有 156 条记录。如果您需要将其连接到其他事务表,您可以通过将上面的连接表设为连接表来实现。在这里受益,因为我包括了开始日期和周末,这些可以成为您加入表格的一部分。
例子,在
record WeekNum StartOfWeek EndOfWeek
1 ?? 2016-04-20 2016-04-27
2 ?? 2016-04-27 2016-05-04
3 ?? 2016-05-04 2016-05-11
4 ?? 2016-04-11 2016-05-18... etc
通过在起点上增加 1 周,您可以看到它会执行 Ex:星期一到星期一。下面的 JOIN 条件比 EndOfWeek 少。这将说明 UP TO 但不包括结束日期的任何交易......例如 2016-04-26 11:59:59PM 的交易(因此小于 2016-04-27,因为 04/27 是交易的开始下周的交易周期)
select
Cal.WeekNum,
YT.YourColumns
from
YourTransactionTable YT
JOIN ( aboveCalendarQuery ) Cal
on YT.TransactionDate >= Cal.StartOfWeek
AND YT.TransactionDate < Cal.EndOfWeek
where
whatever else
如果您想要的话,您甚至可以对分组进行 sum(),例如按 WeekNum。
希望这是一种更准确、更有效的方式来构建您的日历,以便在您需要时运行并链接到事务。
评论回复。
您可以通过连接到 a (select 1 union select 2 union … select 156),但您可以选择。 “AnyTable…”的唯一原因是我确信对于任何合理的具有事务的数据库,您将拥有 156 条记录或更容易。它的唯一目的是只允许一行在迭代中循环以动态创建行。
也比您开始时遇到的循环机制更可靠。这没有错,尤其是学习目的,但如果有更有效的方法,那不是更有意义吗?
根据评论的反馈
我不完全了解您要插入的其他表,但是是的,您可以将其用于所有 3000 项操作。提供更多你正在尝试做的事情,我可以调整...与此同时,类似这样的事情...
insert into YourOtherTable
( someField,
AnotherField,
WeekNum
)
select
x.someField,
x.AnotherField,
z.WeekNum
from
Your3000ThingTable x
JOIN (select
YEARWEEK( @startDate ) WeekNum,
@startDate as StartOfWeek,
@startDate := date_add( @startDate, interval 1 week ) EndOfWeek
from
( select @startDate := '2016-04-20') sqlv,
AnyTableThatHasAtLeast156Records
limit
156 ) z
on 1=1
where
x.SomeCodition...
通过在 1=1(始终为真)上加入 156 条记录的选择,它将返回 Your3000ThingTable 中任何记录的 156 个条目。所以,如果你有一个包含
的库存项目表Item Name
1 Thing1
2 Thing2
3 Thing3
您的最终插入将是
Item Name WeekNum
1 Thing1 1
1 Thing1 2
1 Thing1 ...
1 Thing1 156
2 Thing2 1
2 Thing2 2
2 Thing2 ...
2 Thing2 156
3 Thing3 1
3 Thing3 2
3 Thing3 ...
3 Thing3 156
为了预先确认您认为会发生什么,只需在 1=1 上尝试选择/连接,您将看到查询将插入到目标表中的所有记录。
关于mysql - 迭代日期 Mysql 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777728/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!