線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2779
推到 Plurk!
推到 Facebook!

SQL語法的問題

答題得分者是:kadee
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-16 23:02:23 IP:115.83.xxx.xxx 訂閱
我使用SQL-Server 2005 Express

其中一張Table欄位如下:
vi01 varchar 客戶編號
vi02 datetime 日期
vi03 varchar 地點
vi04 varchar 內容
sysupdate datetime 更新日期

我想要用vi02查詢2個月內沒有拜訪過的客戶

select vi01,max(vi02) as maxdate from visit group by vi01
可以查出每個客戶最近一次拜訪日期,
但是我try好久不知道2個月條件要怎麼加進去
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-17 09:07:37 IP:60.248.xxx.xxx 未訂閱

[code delphi]
declare @temp table(vi01 varchar(3),vi02 datetime,vi03 varchar(6),vi04 varchar(10),sysupdate datetime)
insert @temp
select '001',Cast('20081116' as datetime),'台北','XXX',GetDate()

insert @temp
select '002',Cast('20081216' as datetime),'台中','XXX',GetDate()
insert @temp
select '003',Cast('20090101' as datetime),'高雄','XXX',GetDate()
select vi01,max(vi02) LastVis
from @temp
where vi02<DateAdd(m,-2,GetDate())
group by vi01
[/code]

===================引 用 frappe 文 章===================
我想要用vi02查詢2個月內沒有拜訪過的客戶
編輯記錄
pedro 重新編輯於 2009-02-17 09:08:20, 註解 無‧
pedro 重新編輯於 2009-02-17 09:09:12, 註解 無‧
pedro 重新編輯於 2009-02-17 14:01:24, 註解 無‧
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-17 12:29:02 IP:115.83.xxx.xxx 訂閱
這樣好像一筆一筆插入資料,好像怪怪的@@?

我寫一次寫stored procedure :

declare @temp table(vi01 varchar(10),vi02 datetime)
insert @temp select vi01,max(vi02) as maxdate from visit group by vi01
select * from @temp where vi02


這樣可以找出vi02,但是vi03,vi04就不知道要如何顯示資料
可以自己join自己嗎@@?


===================引 用 pedro 文 章===================

[code delphi]
declare @temp table(vi01 varchar(3),vi02 datetime,vi03 varchar(6),vi04 varchar(10),sysupdate datetime)
insert @temp
select '001',Cast('20081116' as datetime),'台北','XXX',GetDate()

insert @temp
select '002',Cast('20081216' as datetime),'台中','XXX',GetDate()
insert @temp
select '003',Cast('20090101' as datetime),'高雄','XXX',GetDate()
select vi01,max(vi02) LastVis
from @temp
where vi02group by vi01
[/code]
編輯記錄
frappe 重新編輯於 2009-02-17 12:31:08, 註解 無‧
frappe 重新編輯於 2009-02-17 12:31:52, 註解 無‧
frappe 重新編輯於 2009-02-17 12:33:09, 註解 無‧
frappe 重新編輯於 2009-02-17 12:33:59, 註解 無‧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-17 12:39:33 IP:59.125.xxx.xxx 訂閱
SELECT VI_01, LastVis, VI03, VI04 FROM(
select vi01 VI_01,max(vi02) LastVis

from @temp
where vi022,GetDate())
group by vi01), @temp WHERE VI_01=VI01 AND LastVis=VI02;

我沒有測試, Please test it !
------
What do we live for if not to make life less difficult for each other?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-17 14:02:44 IP:60.248.xxx.xxx 未訂閱
有一行被此論壇的程式給蓋掉了,
我小於改用全形

一行行insert只是測試資料

select vi01,max(vi02) LastVis,vi03,vi04
from @temp
where vi02<DateAdd(m,-2,GetDate())
group by vi01,vi03,vi04

===================引 用 frappe 文 章===================
這樣好像一筆一筆插入資料,好像怪怪的@@?

我寫一次寫stored procedure :

declare @temp table(vi01 varchar(10),vi02 datetime)
insert @temp select vi01,max(vi02) as maxdate from visit group by vi01
select * from @temp where vi02


這樣可以找出vi02,但是vi03,vi04就不知道要如何顯示資料
可以自己join自己嗎@@?


編輯記錄
pedro 重新編輯於 2009-02-17 14:05:09, 註解 無‧
kadee
高階會員


發表:11
回覆:141
積分:165
註冊:2002-03-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-18 21:45:14 IP:59.127.xxx.xxx 訂閱
select a.vi01 from visit a
where not exists
(select 1 from visit b
where b.vi01 = a.vi01
and b.vi02>='2009/1/1')

我沒有ms- sql ,請自行測試

Kadee / www.bigredinf.net
===================引 用 frappe 文 章===================
我使用SQL-Server 2005 Express

其中一張Table欄位如下:
vi01 varchar 客戶編號
vi02 datetime 日期
vi03 varchar 地點
vi04 varchar 內容
sysupdate datetime 更新日期

我想要用vi02查詢2個月內沒有拜訪過的客戶

select vi01,max(vi02) as maxdate from visit group by vi01
可以查出每個客戶最近一次拜訪日期,
但是我try好久不知道2個月條件要怎麼加進去
------
Kadee/BigRed Ent.
www.tw165.com
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-20 16:04:42 IP:115.82.xxx.xxx 訂閱
Kadee大大真是太厲害了,
原來還可以用not exists可以解決我的問題,謝謝啦^^

===================引 用 kadee 文 章===================
select a.vi01 from visit a
where not exists
(select 1 from visit b
where b.vi01 = a.vi01
and b.vi02>='2009/1/1')

我沒有ms- sql ,請自行測試

Kadee / www.bigredinf.net
系統時間:2024-05-06 4:40:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!