【发布时间】:2021-10-03 14:15:57
【问题描述】:
我无法解决这个问题
我有 2 张桌子,我想计算每个国家/地区所有用户的最高版本
例子:
John 来自美国,他有版本 1、2、3、4、5 和 6
Bob 来自法国,他有版本 1,2 和 3
玛丽也是法国人,她有版本 1,2 和 3
我想只计算其中 anny 的最新版本
因为:
John 拥有更高的版本 6,他不会被计入低于 6 的版本
Bob 有更高的版本 3,他不会被计入低于 3 的版本
Mary 的版本高于 3,她不会被计入低于 3 的版本
所以最终结果将是底部的 Desired 结果集
Table1
ID | USER | COUNTRY
---- ----- ----------
1 | John | USA
2 | Bob | FRANCE
3 | Mary | FRANCE
Table2
ID | USER | VERSION
---- ------- ---------
1 | John | 1
2 | Bob | 1
3 | John | 2
4 | Mary | 1
5 | Mary | 2
6 | John | 3
7 | John | 4
8 | Bob | 2
9 | John | 5
10 | Bob | 3
11 | Mary | 3
12 | John | 6
Desired result set:
Country | V1| V2 | V3 | V4 | V5 | V6
-------- ---- --- ---- ---- ---- ----
USA | 0 | 0 | 0 | 0 | 0 | 1
FRANCE | 0 | 0 | 2 | 0 | 0 | 0
我做了一些尝试,没有运气
SELECT`Table1`.`Country` AS `C`,
count(max( `Table2`.`Version` )) AS `V`
FROM
( `Table1` JOIN `Table2` ON ( ( `Table1`.`USER` = `Table2`.`USER` ) ) )
GROUP BY
`Table1`.`COUNTRY`
OR SOMETHING LIKE THIS
SELECT
`Table1`.`COUNTRY` AS `COUNTRY`,
count(
DISTINCT
IF
(
(
NOT (
`Table2`.`VERSION` IN (
SELECT
`Table2`.`VERSION`
FROM
( `Table1` JOIN `Table2` ON ( ( `Table1`.`USER` = `Table2`.`USER` ) ) )
WHERE
( `Table2`.`VERSION` < 2 )
)
)
),
`Table2`.`ID`,
NULL
)
) AS `V2`
FROM
( `Table1` JOIN `Table2` ON ( ( `Table1.`USER` = `Table2`.`USER` ) ) )
GROUP BY
`Table1`.`COUNTRY`
请帮帮我,谢谢
【问题讨论】:
-
到目前为止,您尝试了哪些方法,在哪里卡住了?您似乎需要每个用户的最大版本,然后按国家/地区进行动态支点。这两个问题都已经在这里得到解答...
-
您能帮我找到有关按国家/地区进行动态支点的解决方案吗?看来我迷路了……
-
stackoverflow.com/questions/12598120/… 我真的很想知道您可以搜索什么,但您找不到基于动态数据透视关键字的链接问题