如何在表格中找到第12个最近的日期?

时间:2017-01-09 11:41:45

标签: sql

我有一个表格,其中包含按客户帐户和过帐月份的销售信息。过帐月份是格式为YYMM的文本字段。我可以轻松编写一个查询来按降序返回不同的发布月份,但是如何从中选择第12行呢?我想找到最近记录之前12个月的发布月份,理想情况下作为标量子查询,以便它可以用作选择标准。目前这个参数是由UDF提供的,但我怀疑子查询的性能会更好。

2 个答案:

答案 0 :(得分:2)

你可以通过以下方式获得第12名:

select distinct month
from t
order by month desc
offset 11
fetch first 1 row only;

这是ANSI SQL,但它不适用于所有数据库。但是,大多数数据库都支持类似的功能。

答案 1 :(得分:0)

您可以使用"窗口功能"确定第12行,如下......

    ;WITH cteExampleData
        (
        PostingMonth,
        Data
        )
        AS
        (
        SELECT '1611', 'Test1'
        UNION ALL SELECT '1612', 'Test2'
        UNION ALL SELECT '1701', 'Test3'
        UNION ALL SELECT '1601', 'Test4'
        UNION ALL SELECT '1602', 'Test5'
        UNION ALL SELECT '1604', 'Test6'
        UNION ALL SELECT '1605', 'Test7'
        UNION ALL SELECT '1501', 'Test8'
        UNION ALL SELECT '1502', 'Test9'
        UNION ALL SELECT '1503', 'Test10'
        UNION ALL SELECT '1401', 'Test11'
        UNION ALL SELECT '1403', 'Test12'
        UNION ALL SELECT '1404', 'Test13'
        UNION ALL SELECT '1405', 'Test14'
        UNION ALL SELECT '1406', 'Test15'
        )
        SELECT *
            INTO #ExampleData
            FROM cteExampleData;

    ;WITH cteFind12thRow
        AS
        (
        SELECT RowNumber = ROW_NUMBER() OVER (ORDER BY PostingMonth),
            *
            FROM #ExampleData
        )
        SELECT * FROM cteFind12thRow
            WHERE RowNumber = 12