Mysql 从一系列年份中选择数字
我正在尝试执行SQL查询,以便下表:Mysql 从一系列年份中选择数字,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我正在尝试执行SQL查询,以便下表: id in_year out_year ------- ---------- ------------- 1 2001 2002 2 2002 2002 3 2004 2007 可以进行查询,以便将该范围内的所有年份映射到id。例如,我希望获得: id ye
id in_year out_year
------- ---------- -------------
1 2001 2002
2 2002 2002
3 2004 2007
可以进行查询,以便将该范围内的所有年份映射到id。例如,我希望获得:
id year
--------- ---------
1 2001
1 2002
2 2002
3 2004
3 2005
3 2006
3 2007
具体地说,假设该表表示一个包含元素的商店,以及元素到达商店和销售日期。该查询将返回映射到它们所在年份的所有元素ID 您可以用数据范围内的年份构建临时表,即
CREATE TABLE tmp_years (
yr YEAR NOT NULL,
PRIMARY KEY (yr)
) ENGINE=INNODB;
INSERT INTO tmp_years (yr) VALUES (2000), (2001), (2002), (2003), (2004), (2005), (2006), (2007);
然后进行连接:
SELECT w.id, y.yr FROM wesams_table w
INNER JOIN tmp_years y ON (y.yr >= w.in_year AND y.yr <= w.out_year);
从wesams_表w中选择w.id,y.yr
内部联接tmp_years y ON(y.yr>=w.in_year和y.yr最整洁的解决方案是创建一个UDF以返回年的范围并使用交叉应用
性能应该相当好,因为UDF是确定性的
编辑:对不起,我认为这不适用于MySQL。没有一个优雅的解决方案(但您可以创建SP或具有年加入时间的临时表)-更好的方法是在您的应用程序中这样做。我实际上正试图通过使用临时表来实现。如何进行联接?创建一个带有数字1..42
的临时表,并使用在out year上联接当前表。我不确定这是否可行。我无法对数据或范围进行假设,因为它将动态变化。F例如,我想做的是找到最短的开始时间年和最长的结束时间年,从最小-最大范围生成一个临时表,然后进行连接。你明白我的意思吗?