Sql server MS-SQL按降序对输出进行排序
我有一个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
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的偏移量或偏移量