我有一個表跟蹤序列號和與所述序列號關聯的許可證數量。客戶可以重新授權一個盒子,增加或減少用戶的數量,並且他們只是針對更改的金額收費。SQL組通過問題 - 選擇哪個行被分組
下表結構存在:
id - Auto Incrementing ID
serial - The serial number
numusers - the number of licenses
date - The date that the request was submitted, with the highest date being the number of users currently licensed
我有以下查詢選擇已更新許可證,和它的作品,如果許可僅被重新提交一次。如果它已被多次重新提交,它將返回對之前更新的引用,以及之前的所有更新。
SELECT p.id as id, c.id as oldid, p.numusers-c.numusers AS dif, p.date, c.date
FROM `licenses` AS p
JOIN `licenses` AS c ON p.serial = c.serial
AND p.date > c.date
AND p.id <> c.id
WHERE p.id = 156
#GROUP BY p.id
這裏是集:
id serial numusers date
26 1234 500 2010-07-14
34 1234 600 2010-07-15
156 1234 500 2010-07-21
當我運行查詢,我得到如下:
id oldid dif date date
156 26 0 2010-07-21 2010-07-14
156 34 -100 2010-07-21 2010-07-15
如果我在查詢取消註釋GROUP BY子句中,我得到oldid爲26的行。我如何只選擇最近日期的行(oldid爲34的行)?我可以使用ORDER BY和LIMIT 1,但我也希望能夠在沒有WHERE子句的情況下從整個表中進行選擇。
我正在使用MySQL 5.1。
這正是我想要的,謝謝。我認爲有一個更容易的SQL方法「從字段Y的最大值記錄字段X」,但我猜不是。 – HalfBrian 2010-07-21 16:51:47