sql在彼此的日期内选择

时间:2015-02-11 19:25:15

标签: sql-server

enter image description here我试图在12个月之内选择所有B类型。

enter image description here

这就是表格的样子。我需要选择12个月内的所有B型。在这种情况下,5,4和3。

以下是创建表的SQL,以防万一。

CREATE TABLE [dbo].[tbl_ads]
(
    [id] [int] NULL,
    [dateStamp] [date] NULL,
    [type] [char](1) NULL
) ON [PRIMARY]
GO

SET ANSI_PADDING OFF
GO

INSERT [dbo].[tbl_ads] ([id], [dateStamp], [type]) 
VALUES (1, CAST(0x61370B00 AS Date), N'b')

INSERT [dbo].[tbl_ads] ([id], [dateStamp], [type]) 
VALUES (2, CAST(0x01380B00 AS Date), N'a')

INSERT [dbo].[tbl_ads] ([id], [dateStamp], [type]) 
VALUES (3, CAST(0x52380B00 AS Date), N'b')

INSERT [dbo].[tbl_ads] ([id], [dateStamp], [type]) 
VALUES (4, CAST(0x73380B00 AS Date), N'b')

INSERT [dbo].[tbl_ads] ([id], [dateStamp], [type]) 
VALUES (5, CAST(0xDA380B00 AS Date), N'b')

我不想使用任何游标。我该如何做到这一点?

提前感谢。

编辑:我为制造混乱而道歉。 Img 2是对我正在尝试的更好的解释。

在这种情况下,我会包含id = 5和id = 3。

它就像一个冒泡排序,然后只选择365天内的记录。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用cross join

查询:

select * from #tbl A
cross join #tbl B
where DATEDIFF(DD,A.dateStamp,B.dateStamp) between 0 and 365
and A.id<>B.id
and A.type='b'
and B.type='b'
order by A.dateStamp

结果:

id  dateStamp   type    id  dateStamp   type
1   2013-07-25  b   3   2014-03-23  b
1   2013-07-25  b   4   2014-04-25  b
3   2014-03-23  b   4   2014-04-25  b
3   2014-03-23  b   5   2014-08-06  b
4   2014-04-25  b   5   2014-08-06  b

这是你在找什么?

答案 1 :(得分:0)

Select * 
from [tbl_ads] 
where type='b' and 
dateStamp Between CONVERT(VARCHAR(4) ,(year(getDate())-1))+'-'+CONVERT(VARCHAR(2) ,month(getDate()))+'-'+CONVERT(VARCHAR(2) ,day(getDate())) AND getDate()

这可能会有所帮助。