【发布时间】:2021-09-28 08:17:34
【问题描述】:
我有一个包含代码和描述列的表格。 Description 列包含按连续顺序排列的一年中的月份,code 为月份编号(例如 Code = 1,Description = 一月)。
我想编写一个 SQL 查询,它获取上个月(从当月开始)并返回一个从该月开始的表并按升序对月份进行排序(上个月是 8 月,因此该表将从 8 月开始第 1 行,代码为 8,接下来是 9 月、9 日等)
到目前为止我的代码:
DECLARE @PreviousMonth INT = MONTH(DATEADD(mm, -1, GETDATE()))
SELECT @PreviousMonth
SELECT
MonthNumber AS Code,
MonthName AS Description
FROM
MonthName
ORDER BY MONTH(DATEADD(mm, -1, GETDATE()))
因此,如果当前月份是 9 月,则 8 月将是上个月。
预期结果(左侧代码,右侧描述):
8 August
9 September
10 October
11 November
12 December
1 January
2 February
3 March
4 April
5 May
6 June
7 July
【问题讨论】:
-
我认为你描述的不是ordering,而是renumbering。
-
我认为这是 Microsoft SQL-Server?您将需要一个 where 子句来获取起始月份,例如 WHERE MonthNumber>= @previousMonth。另外,为什么不简单地按 MonthNumber 排序?
-
您能否将您的预期查询结果添加到您的问题中。
-
添加了预期的查询结果
-
写
DATEADD(mm, ...与DATEADD(month, ...相比,您节省了多少精力?后者的可读性高多少?
标签: sql sql-server tsql