(表欄位)
ID NAME START_DATA
1 aaa 2019-01-01
2 aaa 2019-01-02
3 aaa 2019-01-03
4 bbb 2019-01-03
DISTINCT查詢某一時間段內出現的,在其他時間不出現過的資料
例子:(DISTINCT查詢2019-01-02~2019-01-03之間的資料,正常情況下能查出aaa,bbb
但是aaa在2019-01-01也出現過,所以不應該被查詢出來)
uj5u.com熱心網友回復:
沒太明白你的意思是僅僅出現在指定日期的內容列出,有非指定日期的項不列出?
例如2019-01-02~2019-01-03,只列bbb,因為aaa有非指定日期內的所以不要?
with t as (
select 1 as ID,'aaa' as NAME,convert(date,'2019-1-1') as START_DATA
union all select 2,'aaa','2019-1-2'
union all select 3,'aaa','2019-1-3'
union all select 4,'bbb','2019-1-3'
)
select *
from t a
where START_DATA between '2019-1-2' and '2019-1-3'
and not exists(
select top 1 1
from t
where NAME=a.NAME and START_DATA not between '2019-1-2' and '2019-1-3'
)
追加條件限制一下就可以
uj5u.com熱心網友回復:
不想寫sql大致思路
去反應該是最快的 即 找出不在給定范圍內的資料 然后not in 查詢出在指定范圍內出現的
uj5u.com熱心網友回復:
CREATE TABLE #T
(ID INT IDENTITY(1,1),
NAME VARCHAR(10),
START_DATE DATE)
INSERT INTO #T
SELECT 'AAA','2019-01-01' UNION ALL
SELECT 'AAA','2019-01-02' UNION ALL
SELECT 'AAA','2019-01-03' UNION ALL
SELECT 'BBB','2019-01-03'
DECLARE @START_DATE DATE
DECLARE @END_DATE DATE
SET @START_DATE='2019-01-01'
SET @END_DATE='2019-01-03'
SELECT * FROM #T A
WHERE START_DATE BETWEEN @START_DATE AND @END_DATE
AND NOT EXISTS (SELECT 1 FROM #T WHERE NAME=A.NAME AND START_DATE NOT BETWEEN @START_DATE AND @END_DATE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/77745.html
標籤:疑難問題
上一篇:Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e10'[Microsoft][ODBC Mic
下一篇:求技術
