【问题标题】:Date ranking in Access SQL?Access SQL中的日期排名?
【发布时间】:2012-06-23 03:26:26
【问题描述】:

我有一个查询从一个表中提取过去六个月的数据,该表有一个列 UseDates(所以从今天 6 月开始,这个表的日期是 2011 年 12 月到 2012 年 5 月)。

我希望包含一个“排名”列,它将 1 与所有 12 月日期、2 与所有 1 月日期等相关联 - 最多 6 个对应于一个月前的日期。如果我从现在开始一个月后打开这个查询,那么 1 将与一月相关联,等等。

我希望这是有道理的!

例如,如果我现在运行查询

UseDate        Rank
12/31/2011     1
1/12/2012      2
...
5/23/2012      6

例如,如果我在 8 月运行查询:

UseDate        Rank
2/16/2012      1
3/17/2012      2
...
7/21/2012      6

例如,如果我在 3 月份运行查询:

UseDate        Rank
9/16/2011      1
10/17/2011     2
...
2/24/2012      6

【问题讨论】:

    标签: ms-access


    【解决方案1】:
    SELECT
        UseDates,
        DateDiff("m", Date(), UseDates) + 7 AS [Rank]
    FROM YourTable;
    

    【讨论】:

    • 我添加了一些说明性的例子
    • 有没有办法让它动态化,这样我就不必硬核日期了?我以后可能会忘记它
    • 糟糕。硬编码的日期是从我的测试中继承下来的。试试我刚才更正的版本。对此感到抱歉。
    【解决方案2】:

    您可以将month function 用于UseDates 并从now 函数的结果中减去它。如果它变为负数,只需添加 12。此外,您可能需要添加 1,因为您从 1 而不是 0 开始。显然它应该适用于半年的日期范围。当您需要“排名”几年时,您会遇到麻烦。

    【讨论】:

    • 我不确定这是否有效——但如果有帮助,我已经添加了一些说明性示例
    【解决方案3】:

    你可以用计数来排名。

    SELECT 
       Table.ADate, 
       (SELECT Count(ADate) 
        FROM Table b 
        WHERE b.ADate<=Table.ADate) AS Expr1
    FROM Table3;
    

    您必须在子查询中重复任何 where 语句:

    SELECT 
       Table.ADate, 
       (SELECT Count(ADate) 
        FROM Table b 
        WHERE b.ADate<=Table.ADate And Adate>#2012/02/01#) AS Expr1
    FROM Table3
    WHERE   Adate>#2012/02/01#
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多