gpt4 book ai didi

sql - MySQL 加入时间线

转载 作者:行者123 更新时间:2023-11-29 05:43:46 25 4
gpt4 key购买 nike

我有一个包含 2 列的表格,id 和 date。

假设我有一些漏洞(即我没有存储几天),这是为特定时期的每一天检索一行的最佳方法?

我想对生成的日期表执行 LEFT JOIN,但我想知道这是执行此操作的更好方法。

如果不是,哪种方法是生成时间表的好方法?

谢谢!

最佳答案

生成数据表不是一个坏主意:数据是固定的,您可以利用索引,如果将数据持久化在内存中则无法做到这一点(好吧,您可以使用临时表,这是仍在使用生成的数据表)。

这是一个例子:

CREATE TABLE myDateTable (
id INT(11) not null auto_increment,
fullDate DATE NOT NULL,
dYear SMALLINT(11) NOT NULL,
dQuarter TINYINT(11) NOT NULL,
dMonth TINYINT(11) NOT NULL,
dDay TINYINT(11) NOT NULL
PRIMARY KEY (id),
KEY idx_fullDate (fullDate)
) ENGINE=INNODB
;

DELIMITER //

CREATE PROCEDURE fillMyDateTable()
BEGIN

SET @startDate = '2011-01-01';
SET @endDate = '2012-12-31';

REPEAT

INSERT INTO myDateTable (fullDate, dYear, dQuarter, dMonth, dDay)

SELECT thisDate
, YEAR(thisDate)
, QUARTER(thisDate)
, MONTH(thisDate)
, DAYOFMONTH(thisDate)
FROM (SELECT @startDate AS thisDate) f
WHERE NOT EXISTS
(SELECT 1 FROM myDateTable d WHERE d.fullDate = f.thisDate);

SET @startDate = DATE_ADD(@startDate, INTERVAL 1 DAY);
UNTIL (@startDate > @endDate AND @startDate > CURRENT_DATE())
END REPEAT;

END

//

关于sql - MySQL 加入时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com