【问题标题】:T/SQL, Stored procedureT/SQL, 存储过程
【发布时间】:2018-10-03 13:53:11
【问题描述】:

在这里需要帮助。我想根据日期函数获取动态名称列表。上个月,上个月-1,上个月-2。只需获取上个月的前 10 个名称,上个月的 - 2 和上个月的 - 3

  1. 上个月前十名。我想获得上个月动态前 10 名。在这种情况下,上个月将是三月,就像我们在四月一样。
  2. 当月 - 2 个月前的姓名列表(2 月的姓名列表)
  3. 从当月 - 3 个月(1 月的姓名列表)

约翰

谢谢

【问题讨论】:

  • TOP 10 凭什么?? 你想按字母顺序吗?
  • 样本数据最好使用DDL + DML。请edit您的问题包括它,您当前的尝试和您想要的结果。

标签: sql tsql stored-procedures dynamic


【解决方案1】:

假设有一个名为“Table1”的表,其名称为 date_created 和 value。

所以您的查询可能是: (1) 上个月

select * from Table1
WHERE date_created>=DATEADD(month, datediff(month, 0, getdate())-1, 0)
and date_created<DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
order by Value desc

(2) 最近两个月

select * from Table1
WHERE date_created>=DATEADD(month, datediff(month, 0, getdate())-2, 0)
and date_created<DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
order by Value desc

(3) 过去 3 个月

select * from Table1
WHERE date_created>=DATEADD(month, datediff(month, 0, getdate())-3, 0)
and date_created<DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
order by Value desc

【讨论】:

    【解决方案2】:

    如果您有 tally 表,则使用它来获取前 10 个月的名称:

    SELECT TOP 10 n AS A, DATENAME(mm, DATEADD(mm, 0 - n, GETDATE())) FROM tally;
    

    要创建 tally 表,请参阅SQL ServerCentral

    【讨论】:

      【解决方案3】:
      SELECT * FROM
      (
          SELECT Datediff(Month,Date,GETDATE()) Mon
          ,ROW_NUMBER()Over (partition by Datediff(Month,date,GETDATE()) ORDER BY date) RNO ,* 
          FROM Table
      )A 
      WHERE mon <=3 and mon > 0 and rno<=10
      

      【讨论】:

        猜你喜欢
        • 2013-05-28
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2013-06-26
        • 2017-03-30
        • 2011-03-18
        • 1970-01-01
        相关资源
        最近更新 更多