討論區快速選單
知識庫快速選單
網路投保旅行平安險 討論區最近新進100則主題 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
兩個Table 間, 調出不重覆的日期資料
更改我的閱讀文章字型大小
作者 : alumic(alumic)
[ 貼文 12 | 人氣 294 | 評價 10 | 評價/貼文 0.83 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/19 下午 02:45:28
SQL Server 2005

Table1: Daily
欄位: daDatetime (資料型態: smalldatetime)
資料內容為:

2010-03-11 12:59
2010-03-12 13:55
2010-03-15 11:45
2010-03-15 12:44
2010-04-01 04:30

Table2: KBarX
欄位: kbDatetime (資料型態: smalldatetime)
內容:
2010-03-11 12:59
2010-03-12 13:55
2010-03-15 11:45
2010-03-15 12:44

SQL Command 功能: 將兩個 Table 的 daDatetime & kbDatetime 的"日期"進行比兌, 調出
不重覆的日期資料, 例如: 2010-04-01

個人進行了下列三種寫法, 雖然可以正確輸出結果, 但實在是太耗系統資源, 且運算過久, 是否有人
能將下面的 SQL Command 進行改寫, 以期能在最短的運算時間內, 輸出正確值, 感恩~~
=========================================================
ex1:

SELECT DISTINCT(LEFT(CONVERT(varchar(19),daDatetime,120),10)) as daDay FROM Daily
WHERE LEFT(CONVERT(varchar(19),daDatetime,120),10) NOT IN
(
SELECT DISTINCT(LEFT(CONVERT(varchar(19),kbDatetime,120),10)) as kbDay FROM KBarX
)
ORDER BY daDay

ex2:
SELECT LEFT(CONVERT(varchar(19),daDatetime,120),10) as daDay FROM Daily
GROUP BY daDatetime
HAVING LEFT(CONVERT(varchar(19),daDatetime,120),10) NOT IN
(
SELECT LEFT(CONVERT(varchar(19),kbDatetime,120),10) as kbDay FROM KBarX
GROUP BY kbDatetime
)
ORDER BY daDay

ex3:
SELECT DISTINCT(LEFT(CONVERT(varchar(19),daDatetime,120),10)) as daDay FROM Daily
EXCEPT
SELECT DISTINCT(LEFT(CONVERT(varchar(19),kbDatetime,120),10)) as kbDay FROM KBarX



作者 : jammy98(Jammy)討論區板主 站務優秀好手貼文超過3000則人氣指數超過300000點
[ 貼文 3524 | 人氣 316866 | 評價 3440 | 評價/貼文 0.98 | 送出評價 3493 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人alumic註記此篇回應為很有道理 2011/3/20 下午 05:42:27
簡單說來 :

1. 建一個View, 把兩個Table UNION起來,
2. 建一個Select語句, Distinct取出即可.
作者 : alumic(alumic)
[ 貼文 12 | 人氣 294 | 評價 10 | 評價/貼文 0.83 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/21 下午 01:45:24
剛有試下列的方法, 速度有變快不少, 請問還能夠最佳化嗎?

CREATE VIEW vD as SELECT DISTINCT(LEFT(CONVERT(varchar(19),daDatetime,120),10)) as daDay FROM Daily
go
CREATE VIEW vK as SELECT DISTINCT(LEFT(CONVERT(varchar(19),kbDatetime,120),10)) as kbDay FROM KBarX
go
SELECT * FROM vK WHERE kbDay NOT IN (SELECT * FROM vd) ORDER BY kbDay

DROP VIEW vD
go
DROP VIEW vK
作者 : alumic(alumic)
[ 貼文 12 | 人氣 294 | 評價 10 | 評價/貼文 0.83 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/3/21 下午 02:30:03
剛才從 view , 想到另一個方法, 速度比 view 還快, 雖然有點笨, 不過可以參考看看:
SELECT DISTINCT(LEFT(CONVERT(varchar(19),daDatetime,120),10)) as daDay INTO #tempDaily FROM Daily ORDER BY daDay
 
SELECT DISTINCT(LEFT(CONVERT(varchar(19),kbDatetime,120),10)) as kbDay INTO #tempKBarX FROM KBarX ORDER BY kbDay

SELECT daDay FROM #tempDaily WHERE daDay NOT IN (SELECT kbDay FROM #tempKBarX) ORDER BY daDay

DROP TABLE #tempDaily

DROP TABLE #tempKBarX

 板主 : AXNET
 > SQL Language - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Language - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Language
1 ㄉ一ˊㄎㄜˋ 1330 
2 路人 1270 
3 坤哥 700 
4 吳馨琳 460 
5 凡人 440 
6 老骨頭 390 
7 pome5 380 
8 BK. 330 
9 Tony 310 
10 HKLN.net 250 
SQL Language
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125