2015-02-11 35 views
0

enter image description here我試圖在12個月內選擇所有的B類型。sql在彼此的日期範圍內選擇

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') 

我不想使用任何遊標。我該如何做到這一點?

在此先感謝。

編輯:我道歉造成混亂。圖2是對我所嘗試的更好的解釋。

在這種情況下,我會包含id = 5和id = 3。

這就像一個氣泡排序,然後選擇365天內的記錄。

+0

您的問題沒有明確定義。如果他們是Jan1,May1和Aug 1,那麼這些都在6個月內?他們將如何分組? – 2015-02-11 19:28:14

+0

@Gordon Linoff如果date1在日期12的12個月內,那麼選擇,如果date2在日期12的12個月內,則選擇。是否有意義? – CFNinja 2015-02-11 19:30:26

+1

你可以添加一個示例輸出嗎?如果結果是記錄:3,4和5,還是應該是3個記錄,日期在6個月內? 3 | 4,5 4 | 3,5 5 | 3,4 – hrezs 2015-02-11 19:36:01

回答

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 

這是你在找什麼?

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() 

這可能有幫助。

+0

感謝您的幫助~~ ^^ – Mulger 2015-02-12 05:45:36

+0

謝謝,但這並沒有回報我所需要的。它只返回一條記錄。 – CFNinja 2015-02-12 16:35:01