Sql server MS-SQL按降序对输出进行排序

Sql server MS-SQL按降序对输出进行排序,sql-server,coldfusion,Sql Server,Coldfusion,我有一个MS-SQL查询,数据库中有数千行记录: SELECT DISTINCT TOP 7 DATENAME(MM, mydatetime) + ' ' + CAST(DAY(mydatetime) AS VARCHAR(2)) as thedate , MONTH(mydatetime) , DAY(mydatetime) , COUNT(Page) as totalcount , count(DISTINCT Page) as visitors FROM

我有一个MS-SQL查询,数据库中有数千行记录:

SELECT DISTINCT TOP 7 DATENAME(MM, mydatetime) + ' ' + CAST(DAY(mydatetime) AS VARCHAR(2)) as thedate
    , MONTH(mydatetime)
    , DAY(mydatetime)
    , COUNT(Page) as totalcount
    , count(DISTINCT Page) as visitors
  FROM someTable
  WHERE Page LIKE '%AEC%'
  GROUP BY DATENAME(MM, mydatetime) + ' ' + CAST(DAY(mydatetime) AS VARCHAR(2))
    , MONTH(mydatetime)
    , DAY(mydatetime)
  ORDER BY MONTH(mydatetime) DESC
    , DAY(mydatetime) DESC
它将输出以下内容:

thedate     | totalcount | visitors
-----------------------------------
October 17  |     4      |    1
October 15  |     1      |    1
October 12  |     1      |    1
October 3   |     3      |    3
October 2   |     42     |    22
September 28|     2      |    1
September 21|     14     |    10
我的问题是,我无法按降序输出,因此它将如下所示:

thedate     | totalcount | visitors
-----------------------------------
September 21|     14     |    10
September 28|     2      |    1
October 2   |     42     |    22
October 3   |     3      |    3
October 12  |     1      |    1
October 15  |     1      |    1
October 17  |     4      |    1

因此,我们非常感谢您的帮助

您需要从ORDERBY子句中删除
DESC

你的结果是完全相反的顺序,因为描述

要获得指定的顺序,仅包括返回结果中所需的日期,需要删除desc并向where子句添加日期筛选器

如果你的过滤器做得好的话,这也可以让你摆脱最上面的语句

SELECT DISTINCT TOP 7 DATENAME(MM, mydatetime) 
    + ' ' + CAST(DAY(mydatetime) AS VARCHAR(2)) as thedate
    , MONTH(mydatetime)
    , DAY(mydatetime)
    , COUNT(Page) as totalcount
    , count(DISTINCT Page) as visitors
  FROM someTable
  WHERE Page LIKE '%AEC%' 
    AND /* filter date range i.e. MONTH(mydatetime) > 9 AND YEAR(mydatetime) > 2011 */
  GROUP BY DATENAME(MM, mydatetime) + ' ' + CAST(DAY(mydatetime) AS VARCHAR(2))
    , MONTH(mydatetime)
    , DAY(mydatetime)
  ORDER BY MONTH(mydatetime) 
    , DAY(mydatetime) 

根据您的实际需求,您可以将当前查询用作派生表,并按照您想要的方式进行排序:

SELECT *
FROM (  SELECT DISTINCT TOP 7 DATENAME(mm, mydatetime) + ' ' 
                              + CAST(DAY(mydatetime) AS VARCHAR(2)) AS thedate, 
                              MONTH(mydatetime)                     AS theMonth, 
                              DAY(mydatetime)                       AS theDay, 
                              COUNT(page)                           AS totalcount, 
                              COUNT(DISTINCT page)                  AS visitors 
        FROM   sometable 
        WHERE  page LIKE '%AEC%' 
        GROUP  BY DATENAME(mm, mydatetime) + ' ' 
                  + CAST(DAY(mydatetime) AS VARCHAR(2)), 
                  MONTH(mydatetime), 
                  DAY(mydatetime) 
        ORDER  BY MONTH(mydatetime) DESC, 
                  DAY(mydatetime) DESC) A
ORDER BY theMonth, theDay

您的示例输出在我看来是升序而不是降序的。升序从早到晚。降序从晚到早。是什么让你认为你想要的输出是降序的?你是指升序吗?在这种情况下,如果我这样做,只需取出
DESC
,它会给我从数据库中的前7条记录,就像上次一样year@crashtestxxx-所以你的实际需求与你发布的不同。您需要最后7条记录,以升序返回order@Lamak请告诉我它如何接受子对象内部的order by它总是给我错误消息1033,级别15,状态1,第16行order by子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非TOP,还指定了XML的偏移量或。我将从数据库中获取去年的7条记录。我需要7条最新记录。ORDERBY子句不会改变您将获得的记录集。它只更改结果记录的顺序。如果没有获得正确的记录,则表示在WHERE子句之前或包含WHERE子句时出现了问题。我注意到你的问题没有提到“年”?这可能是个问题吗?仔细想想,您可以进行嵌套选择以获得所需的结果
Select*from(Select….//您当前的查询)表按月、日排序的订单
Iv尝试使用
WHERE mydatetime>GETDATE()-8和类似“%AEC%”的页面,但它返回了一些无意义的数据。GETDATE()-8只能返回8天。示例中的大多数记录出现在8天前。DATE\u ADD也非常有用。谢谢。哦,刚刚意识到它是MySQL的。我在MS-SQL中遇到错误“它无法识别内置函数”。在这种情况下,请使用DateAdd。我不确定为什么我认为您在使用MySQL-我现在看到了您的问题标题。@RTOMAS-好吧,我希望这是op真正想要的:-)非常感谢您,这正是我需要的。如果我的问题不清楚,很抱歉。@crashtestxxx-很高兴回答helped@Lamak请告诉我它如何接受子对象内部的order by它总是给我错误消息1033,级别15,状态1,第16行order by子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非TOP,还指定了XML的偏移量或偏移量