我有两个表,我正在尝试加入并根据另一列的最大值加上另一个表中的标识符在一列中获取唯一值。这是我的结构。
Partial Table 1 (reward_webuid):
╔════╦═════════╦═════════╦══════════╦═════════════════════╦═════════╗
║ ID ║ WEB_UID ║ ITEM_ID ║ PLAYERID ║ TIMESTAMP ║ EXPIRED ║
╠════╬═════════╬═════════╬══════════╬═════════════════════╬═════════╣
║ 8 ║ 1209520 ║ 73410 ║ 1926406 ║ 2013-01-05 04:47:06 ║ 0 ║
║ 9 ║ 1209520 ║ 73425 ║ 1926406 ║ 2013-01-02 09:40:27 ║ 1 ║
║ 10 ║ 1209520 ║ 73424 ║ 1926406 ║ 2013-01-05 09:40:05 ║ 0 ║
║ 11 ║ 1209520 ║ 73425 ║ 1926406 ║ 2013-01-05 09:40:27 ║ 0 ║
║ 12 ║ 1209521 ║ 73424 ║ 21555896 ║ 2013-01-05 01:33:20 ║ 0 ║
║ 13 ║ 1209521 ║ 75000 ║ 5599854 ║ 2013-01-05 01:35:09 ║ 1 ║
╚════╩═════════╩═════════╩══════════╩═════════════════════╩═════════╝
Partial Table 2 (rewards):
╔═════════╦═════════════════╦══════════════╦═════════════╗
║ ITEM_ID ║ CUST_LOADOUT_ID ║ REWARD_LEVEL ║ EXPIRY_TIME ║
╠═════════╬═════════════════╬══════════════╬═════════════╣
║ 73410 ║ 1 ║ 5 ║ 0 ║
║ 73424 ║ 2 ║ 10 ║ 0 ║
║ 73425 ║ 3 ║ 15 ║ 30 ║
║ 75000 ║ 4 ║ 50 ║ 60 ║
╚═════════╩═════════════════╩══════════════╩═════════════╝
我希望得到的样本返回(cust_loadout_id和playerID,表示基于表1中尚未过期的item_id的奖励等级的最大值)每个playerID应该只有一个值
╔══════════╦═════════════════╗
║ PLAYERID ║ CUST_LOADOUT_ID ║
╠══════════╬═════════════════╣
║ 1926406 ║ 3 ║
║ 21555896 ║ 2 ║
╚══════════╩═════════════════╝
如果有人可以帮忙解决这个问题,将不胜感激。我搜索了大多数与同一个表或3个或更多表相关的查询。我管理的最好的是返回我需要的数据,但没有正确排序
答案 0 :(得分:1)
SELECT a.*, b.*
FROM reward_webuid a
INNER JOIN rewards b
ON a.item_id = b.item_ID
INNER JOIN
(
SELECT aa.PLAYERID, MAX(bb.REWARD_LEVEL) maxLevel
FROM reward_webuid aa
INNER JOIN rewards bb
ON aa.item_id = bb.item_ID
WHERE aa.expired = 0
GROUP BY aa.PLAYERID
) c ON a.PLAYERID = c.PLAYERID AND
b.REWARD_LEVEL = c.maxLevel AND
a.Expired = 0