我试图在12个月之内选择所有B类型。
这就是表格的样子。我需要选择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天内的记录。
答案 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()
这可能会有所帮助。