史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   access的sql查詢日期 (http://forum.slime.com.tw/thread253416.html)

chung1206 2009-10-09 03:47 PM

access的sql查詢日期
 
各位先進們好,我在access有一個資料表,我想利用查詢將已超過一星期的訂單找出來,我的日期格式是98/10/10,請問在sql裡要怎麼寫?要先將它轉換成數字嗎?如果是,我轉了好久轉不出來,麻煩大大們不吝指教,謝謝。

cwvdavid 2009-10-12 10:37 AM

不曉得你的問題解決了沒...

(如果你的日期欄位, 格式是[日期]格式, 直接用下面的方式應該就可以了)
select * from 資料表 where 訂單日期 < #2009/3/3# - 7
select * from 資料表 where 訂單日期 < NOW - 7


如果你的日期欄位, 格式是[文字], 那就非常麻煩了
因為年度本身還有 3位數的問題(再2年就民國100年了)
而月份還有[1月] v.s [01月] 的問題
你得先確定文字的格式完完全全是 xxx/xx/xx
(年度是3位數, 月份一定是2位數, 日期也必須是2位數)
這樣才能夠用SQL指令去比對...

chung1206 2009-10-12 03:15 PM

感謝大大,我的問題已經解決了,但你的方法比較簡單明瞭,不過我現在還有一個問題就是,我不止想將超過一星期的單子調出來,我還要排除重覆的客戶名稱,不知道有沒有辦法?謝謝。

cwvdavid 2009-10-12 04:53 PM

select distinct 客戶名稱, 訂單日期 from 資料表 where 訂單日期 < NOW - 7

================
加上distinct 可以將 【完全重複】的整筆資料, 剔除到只剩1筆
如果你的欄位中有流水號, 那麼加上distinct也沒用(因為整筆記錄當中流水號不會重複)

例如:原本資料有...
客戶A, 2009/3/10
客戶B, 2009/3/11
客戶A, 2009/3/10
客戶C, 2009/3/10
客戶A, 2009/3/10
客戶C, 2009/3/12

則加上Distinct之後會剩下
客戶A, 2009/3/10
客戶B, 2009/3/11
客戶C, 2009/3/10
客戶C, 2009/3/12
(【客戶A, 2009/3/10】 有3筆完全相同,所以2筆被剔除)

chung1206 2009-10-12 05:07 PM

再次感謝,其實我是想要查詢結單超過一星期但客戶沒有新訂單進來的方法,因為我們的東西會一直循環,算消耗品,所以我想追蹤客戶上次給我們做完後,超過一星期沒有再有新訂單進來,或許我一開始想法就錯了,還望大大指教,謝謝。

cwvdavid 2009-10-12 05:42 PM

所以你是要查...
超過1個星期都沒有訂單的客戶囉...


Select * from 客戶資料表
where 客戶ID not IN
( select distinct 客戶ID from 訂單資料表 where 訂單日期 < NOW - 7 )

找出客戶ID 【不在】 7天內進行下訂的

chung1206 2009-10-13 01:54 AM

感謝大大,雖然我還是RUN不起來,不過我先用
SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())>7;
這個跑一陣看看有沒有問題再說,另外想再請教一個問題就是
我想把各個客戶的金額加總,但我不知道怎麼做升幂排列,我想
把加總起來金額由大排到小,以下是我的寫法,但不知怎麼排列
SELECT 客戶名稱, SUM(報價金額) AS [SUM(報價金額)]
FROM 客戶基本資料表
GROUP BY 客戶名稱;
麻煩您了,謝謝...

cwvdavid 2009-10-13 02:52 AM

引用:

作者: chung1206 (文章 2196823)
感謝大大,雖然我還是RUN不起來,不過我先用
SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())>7;
這個跑一陣看看有沒有問題再說,另外想再請教一個問題就是
我想把各個客戶的金額加總,但我不知道怎麼做升幂排列,我想
把加總起來金額由大排到小,以下是我的寫法,但不知怎麼排列
SELECT 客戶名稱, SUM(報價金額) AS [SUM(報價金額)]
FROM 客戶基本資料表
GROUP BY 客戶名稱;
麻煩您了,謝謝...



SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())>7;

這種寫法在普通情況下可以用,但如果你遇到【全新的客戶】
完全都還沒下過訂單,就會找不到了...

(如果一開始建立 客戶基本資料表 時,就有預設一個結單日期,
那就完全ok)
========================

在進行order by時,不能用別名...
也就是說,你設了一個 欄位,實際資料是【SUM(報價金額)】的時候,
排序時就必須照著寫【SUM(報價金額)】

而別名最好不要寫成【[SUM(報價金額)]】,
雖然也是可以...但不太建議...



SELECT 客戶名稱, SUM(報價金額) AS 加總金額
FROM 客戶基本資料表
GROUP BY 客戶名稱
order by SUM(報價金額);



SELECT 客戶名稱, SUM(報價金額) AS [SUM(報價金額)]
FROM 客戶基本資料表
GROUP BY 客戶名稱
order by SUM(報價金額);

chung1206 2009-10-13 08:43 AM

感謝大大,升幂及降幂排列已解決,但之前那個問題,我是有設結單日期的,我有設建表日期及結單日期,但我實際去RUN時,很奇怪的是有些筆數明明在條件範圍之內,但竟然沒秀出來,倒不是直接出現錯誤訊息...這個我可能還要再想想

chung1206 2009-10-13 08:52 AM

抱歉大大,剛才又發現了一個問題,結單日期超過一星期可用

SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())>7;

但結單日超過一個月似乎好像沒辦法再用

SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())>30;

是不是因為sql沒辦法計算誇月的問題?:em03:

cwvdavid 2009-10-13 10:28 AM

我都是直接用 [日期欄位] 減掉數字

select now - 10 as [10天前]
select now - 100 as [100天前]
select now - 200 as [200天前]

使用DateDiff...也可以(超過1個月也支援)
select DateDiff("D", #2009/1/1#, now()) as [天數差距]

chung1206 2009-10-13 10:45 AM

大大您好,我是想查詢結單日期過一個月的客戶資料,但我每個結單日期都不一樣,我的方式是

SELECT *
FROM 客戶基本資料表
WHERE DateDiff("d",結單日期,Now())+30;

但好像不管用=.=:em02:

cwvdavid 2009-10-13 06:13 PM

where DateDiff("d",結單日期,Now())+30 ???

假設 DateDiff("d",結單日期,Now()) 的結果是50...

那你的判斷式就是..
SELECT * FROM 客戶基本資料表 where 80


(where 80.......並沒有判斷行為.......)

chung1206 2009-10-15 01:45 PM

所以如果我想查詢2009/10/15前三十天的資料就輸入您教我的式子

select DateDiff("D", #2009/10/15#, now()) as 30

這樣就可以了嗎?但它怎麼知道我想查詢的是那個資料表呢?

cwvdavid 2009-10-15 04:05 PM

呃..............................................................

請改成下面的寫法...

SELECT * FROM 客戶基本資料表 WHERE DateDiff("d",結單日期,Now()) < 30
SELECT * FROM 客戶基本資料表 WHERE DateDiff("d",結單日期,Now()) > 30


所有時間均為台北時間。現在的時間是 10:44 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1