2010-02-12 63 views
0

我有一个这样的表;带有日期过滤器的SQL Server查询

ID int, 
OrderedDate DateTime 

我想只选择下个月的记录。

例如结果集:

ID OrderedDate 

110 January 
110 February 
200 January 
200 February 

如何我写这篇文章的查询?

+0

恐怕你的问题有点不清楚 - 请你详细说明一下。 – CJM 2010-02-12 14:10:36

回答

1

我想你想要的ID有订单的月份列表,但月份按月份编号而不是名称排序的月份列表?

create table test21210 
(
    id int, 
    OrderedDate datetime 
) 
go 

insert test21210 (id, OrderedDate) values (110, '1/1/2010') 
insert test21210 (id, OrderedDate) values (110, '1/5/2010') 
insert test21210 (id, OrderedDate) values (110, '1/10/2010') 
insert test21210 (id, OrderedDate) values (110, '2/2/2010') 
insert test21210 (id, OrderedDate) values (110, '2/4/2010') 
insert test21210 (id, OrderedDate) values (110, '2/6/2010') 

insert test21210 (id, OrderedDate) values (200, '1/3/2010') 
insert test21210 (id, OrderedDate) values (200, '1/5/2010') 
insert test21210 (id, OrderedDate) values (200, '1/7/2010') 
insert test21210 (id, OrderedDate) values (200, '1/9/2010') 
insert test21210 (id, OrderedDate) values (200, '2/3/2010') 
insert test21210 (id, OrderedDate) values (200, '2/5/2010') 
insert test21210 (id, OrderedDate) values (200, '2/7/2010') 
insert test21210 (id, OrderedDate) values (200, '2/9/2010') 
go 

with idmonth (id, MonthNumber) as 
(
    select id, MONTH(ordereddate) as 'MonthNumber' 
    from test21210 
    group by id, MONTH(ordereddate) 
) 
select id, DATENAME(MONTH, STR(MonthNumber)+'/1/2000') 
from idmonth 
order by id, MonthNumber 
1

这个问题似乎有点不清楚。但是这个例子使得它看起来像你想按ID排序,然后按月份名称排序。如果是这样,那么我认为这将做到这一点。我没有SQL Server来测试它,所以我确定它有语法或其他错误。

SELECT ID, DATENAME(month, OrderedDate) AS OrderedDate from table 
     ORDER BY 1, MONTH(OrderedDate)