อยากทราบ SQL command เพื่อหาวันล่าสุดของข้อมูลของลูกค้าแต่ละคน แสดงผลเป็นตาราง
ตารางแรกเ็ป็นข้อมูลส่วนตัวของลูกค้าครับ customerInfo
ตารางที่สองเป็นข้อมูลใดๆของลูกค้าแต่ละราย customerData
ตารางที่สามเป็น output ที่อยากได้ครับ
ขอบคุณมากๆครับ
Date :
2011-02-02 16:50:25
By :
snowbell
ขอขุดหน่อยน้า
Date :
2011-02-03 07:56:26
By :
snowbell
เอาตารางลูกค้าและตารางข้อมูลมา join กัน
โดย join ด้วย รหัสลูกค้า
จากนั้นเลือกฟิลด์ รายละเอียดลูกค้า (ชื่อ สกุล อายุ ฯ)
แตในฟิลด์ที่เป็นวันที่จากตารางข้อมูล(ตามที่คุณระบุ) ให้เลือกจากด้วย function max(date_field)
และ group ด้วยรหัสลูกค้า
แนวคิดจะประมาณนี้ และใช้ได้กับทุกฐานข้อมูล
ส่วนอยากหา precise datetime difference ดิฉันเคยเขียนเอาไว้แต่ระบุความต่างได้เพียง ปี เดือน วัน
คุณคงต้องไปค้นเองค่ะในบอร์ดนี้แหละ และมี source code เอาไว้ คุณลองเพิ่มความละเอียดให้ถึง
ชั่วโมง นาที วินาที เองนะคะเพราะความต้องการ output แบบนี้ไม่มี function มาตราฐานเตรียมไว้ให้
ต้องมีใครสักคนเขียนขึ้นมาค่ะ
Date :
2011-02-03 12:49:49
By :
สาวเอ๋อ (ทั้งปีทั้งชาติ)
SELECT CustomerID, MAX(Date) AS [time], DATEDIFF([minute], MAX(Date), GETDATE()) AS [Minute]
FROM Customer
GROUP BY CustomerID
ORDER BY [time] DESC
มันจะได้ ID เวลาล้าสุด และก็ ผลต่างเวลาเป็นนาที จขกท. ก็ไปแปลงเอาเองนะครับไม่น่าเกินความสามารถ
จงสู้ต่อไปนะครับ จีบัน
Date :
2011-02-03 14:50:29
By :
kaimuk
ผมขอยกตัวอย่างกรณีที่ตารางที่สอง
มี Primary Key สมมุติว่าชื่อ PK ล่ะกัน
SELECT t1.CustomerID, t1.Name,
LatestDate = t2.Date
FROM Table1 t1
LEFT JOIN Table2 t2 ON t2.CustomerID=t1.CustomerID
AND t2.PK=(SELECT TOP 1 tx.PK FROM Table2 tx
WHERE tx.CustomerID=t1.CustomerID
ORDER BY tx.Date DESC)
ส่วนคอลัมภ์สุดท้าย ก็ลุยเองล่ะกันครับ
Date :
2011-02-03 18:10:18
By :
หางอึ่ง
ใช้ GROUP BY จะได้ performance ดีที่สุดค่ะ ถ้าใช้ SUB QUERY แบบคุณหางอึ่ง
จะใช้เวลานานและกิน RESOURCE ค่ะ
Date :
2011-02-03 20:44:53
By :
สาวเอ๋อ (ทั้งปีทั้งชาติ)
ก็อย่างที่ สาวเอ๋อ No6 ว่าล่ะครับ
Query No 5 ใช้กรณีที่ เราต้องการข้อมูลฟิล์ดอื่นด้วยใน Table2
เช่นบางครั้งเราอยากรู้ว่า ใบสั่งซื้อล่าสุด ของลูกค้าแต่ละราย มีมูลค่ารวมกี่บาท
Date :
2011-02-04 09:16:39
By :
หางอึ่ง
Load balance : Server 01