SQL ถามการ QUERY ช่วงเวลา
กระทู้เก่าบอร์ด อ.Yeadram

 3,873   1
URL.หัวข้อ / URL
SQL ถามการ QUERY ช่วงเวลา

ข้อมูลครับ
Table aaa
code   name   date
a    x1 12/01/11
a    x1 15/01/11
a    x1   05/02/11
b    x2   01/01/11
b    x2   05/03/11
ต้องการ Query ว่า มี code ใหนบ้าง ที่มี nameเหมือนกัน และมีวันที่ห่างกันไม่เกิน 30 วัน
เช่น คำตอบ
a   x1    12/01/51   15/01/11      3 (ห่างกัน 3 วัน)
a   x1    15/01/11    02/02/11    17
b   x2    (ห่างกันเกิน 30 วัน ไม่ต้องแสดง)

ต้องสั่ง SQL ว่าอย่างไรบ้างครับ

1 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R09226
ฟังก์ชั่นที่ใช้หาผลต่างของวัน (หรือช่วงเวลาอื่นๆเช่น เดือน, ปี, ชั่วโมง, นาที, วินาที) คือ DateDiff การเรียกใช้คือ DateDiff("d", date1, date2) ซึ่งจะให้ผลต่างของจำนวนวัน , ถ้า date1 น้อยกว่า date2 จะให้ผลต่างเป็นบวก แต่ถ้ากลับกันจะให้เป็นลบ

สมมุติให้เทเบิลชื่อว่า T ดังนั้น SQL ที่ใช้ก็คือ

select T1.code, T1.date, (select min(T2.date) from T as T2
                             where (T2.code = T1.code)
                             and (T2.name = T1.name)
                             and (T2.date > T1.date)) as nextdate
from T as T1
where DateDiff("d",T1.date,
(select min(T2.date) from T as T2
                             where (T2.code = T1.code)
                             and (T2.name = T1.name)
                             and (T2.date > T1.date))) >= 3


ตรงนี้คือส่วนที่หาวันที่ถัดไป นั่นคือวันที่ที่น้อยที่สุดที่มากกว่าวันที่ในเรคอร์ดนี้ โดยที่มี code และ name เหมือนกับในเรคอร์ดนี้ด้วย
select min(T2.date) from T as T2
where (T2.code = T1.code)
and (T2.name = T1.name)
and (T2.date > T1.date)


อย่าลอกไปโดยไม่เอาไปศึกษานะครับ กรุณาไปอ่านทำความเข้าใจด้วยว่าทำไมถึงเป็นอย่างนี้ มันทำงานอย่างไร ตรงไหนไม่เข้าใจให้มาถามใหม่ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2604s