?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

SQL-трюки - morfizm


Sep. 18th, 2009 06:48 pm SQL-трюки

Как создать запрос, вычисляющий что-нибудь для каждого 10-минутного интервала, но при этом обойтись без циклов и дополнительных таблиц?

Очень просто: сделать OUTER JOIN на табличку с датами, генерируемую зарпосом:

WITH D(i) AS
( 
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
),
Numbers AS
(
    SELECT d7.i*4096 + d6.i*1024 + d5.i*256 + d4.i*64
           + d3.i*16 + d2.i*4 + d1.i AS N
        FROM D d1, D d2, D d3, D d4, D d5, D d6, D d7
),
Dates AS
(
    SELECT DATEADD(minute, N*10, '2009-09-01') AS date
        FROM Numbers
)
SELECT date
    FROM Dates
    WHERE date < '2009-09-10'
    ORDER BY date
Этот запрос выдаст все даты между 1 и 10 числом с шагом в 10 минут.
Спасибо за идею вот по этому линку: http://www.projectdmx.com/tsql/tblnumbers.aspx

Leave a commentPrevious Entry Share Next Entry