My products table,
x
year
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
2001
2000
My Query,
SELECT dt||'-'||dt1
FROM
(SELECT year as dt, year+4 as dt1
FROM
products
GROUP BY year);
My output,
2000-2004
2001-2005
2002-2006
2003-2007
2004-2008
2005-2009
2006-2010
2007-2011
2008-2012
2009-2013
2010-2014
2011-2015
2012-2016
2013-2017
2014-2018
expected result,
2000-2004
2005-2009
2010-2014
I’m not getting any clue for generating that date interval. Any tips and suggestion of query will be of great help. Thanks
Advertisement
Answer
You can subtract a modulus 5 from the year and group by that.
SELECT (year-(year%5))||'-'||(year-(year%5)+4) AS years
FROM products
GROUP BY year-(year%5)
A modulus N is the remainder when the nearest lower multitude of N is substracted from a number.
For example:
11%5 = 11 - 10 = 1
8%5 = 8 - 5 = 3
So by subtracting it from the year you get the nearest multitude of 5
2018 - 2018%5 = 2018 - 3 = 2015
Another way to round the year down is to divide & multiply it by 5
SELECT (CAST(year/5 AS INTEGER)*5)||'-'||MAX(year) AS years
FROM products
GROUP BY CAST(year/5 AS INTEGER)*5;
A test on db<>fiddle here