从一系列年份中选择数字

时间:2013-02-17 22:20:16

标签: mysql sql database sqlite

我正在尝试执行SQL查询,如下表所示:

    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。

2 个答案:

答案 0 :(得分:0)

您可以使用您的数据范围中的年份构建临时表,例如

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);

答案 1 :(得分:0)

最整洁的解决方案是创建一个UDF来返回年份并使用CROSS APPLY。

性能应该相当不错,因为UDF将是确定性的

编辑:对不起,我认为这不适用于MySQL。