ฉันมีตารางเด็กที่เป็นเช่นนี้:
[ตารางวันที่ Cust]
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 1 | 2012-03-31 | 50.00 |
| 2 | 2012-04-30 | 0.00 |
| 2 | 2012-03-31 | 10.00 |
| 3 | 2012-03-31 | 60.00 |
| 3 | 2012-02-29 | 10.00 |
ฉันต้องการได้รับชุดผลลัพธ์เช่นนี้ - หนึ่งระเบียนสำหรับลูกค้าแต่ละรายที่มีวันที่ล่าสุด:
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 1 | 2012-04-30 | 20.00 |
| 2 | 2012-04-30 | 0.00 |
| 3 | 2012-03-31 | 60.00 |
ฉันรู้ว่าฉันสามารถทำสิ่งนี้สำหรับ "รหัสลูกค้า" แต่ละรายด้วย SQL (ไวยากรณ์เซิร์ฟเวอร์ SQL) ต่อไปนี้:
select top 1 [Some Date], [Customer ID], [Balance]
from [Cust Date Table]
where [Customer ID] = 2
order by [Some Date] desc
| Customer ID | Some Date | Balance |
+-------------+------------+---------+
| 2 | 2012-04-30 | 0.00 |
แต่ฉันไม่แน่ใจว่าจะรับทั้งสามรายการที่ฉันต้องการได้อย่างไร ฉันไม่แน่ใจว่านี่เป็นสถานการณ์ที่เรียกใช้แบบสอบถามย่อยหรืออย่างอื่น
โปรดทราบว่าวันที่สูงสุดอาจแตกต่างกันไปตาม [รหัสลูกค้า] ใด ๆ (ในตัวอย่างนี้วันที่สูงสุดของลูกค้า 3 คือ 2012-03-31 ในขณะที่บันทึกอื่น ๆ มีวันที่สูงสุดปี 2012-04-30) ฉันเหนื่อย
select [Customer ID], MAX([Some Date]) AS [Latest Date], Balance
from [Cust Date Table]
group by [Customer ID], Balance;
ปัญหาคือสิ่งนี้ไม่ได้ส่งคืนเพียงแถวเดียวสำหรับลูกค้าแต่ละราย แต่จะคืนค่าหลายแถว