在过去的几天里,我一直在玩这个,似乎在绕圈子,所以我想在我秃顶之前寻求帮助。
我已经设法收到了基于第1列中的最大值的前20个条目,但没有考虑Stat 1中的重复项,其中Stat 2更高等。因此,如果用户有两个具有相同Stat 1的条目,则返回两者。
数据如下所示:
| Stat1| Stat2| Stat3| Stat3 |
| --|--|--| ------------ |
| 二十六|十八个|四个| 4 |
| 二十个|二十六|八个| 8 |
| 二十六|十九岁|九个| 9 |
| 三十|五个|一个| 1 |
| 二十六|十八个|六个| 6 |
| 十二个|八个|二个| 2 |
预期结果:
| Stat1| Stat2| Stat3| Stat3 |
| --|--|--| ------------ |
| 三十|五个|一个| 1 |
| 二十六|十九岁|九个| 9 |
| 二十六|十八个|六个| 6 |
| 二十六|十八个|四个| 4 |
这是我最新的查询,它返回了上面提到的重复项,没有考虑Stat 2列。
SELECT
TOP 20
t1.UID,
isnull(t1.Stat1, 0) AS Stat1,
isnull(t1.Stat2, 0) AS Stat2,
isnull(t1.Stat3, 0) AS Stat3
FROM
TABLE t1
WHERE
t1.Stat1 = (
SELECT
MAX(t2.Stat1)
FROM
TABLE t2
WHERE
t2.UID = t1.UID
)
ORDER BY
Stat1 DESC,
Stat2 DESC,
Stat3 DESC
字符串
我还尝试返回所有值。在PHP中循环手动删除重复的内容。(这个方法很有效)我只是不喜欢这个方法,因为我觉得它很浪费。
1条答案
按热度按时间jmo0nnb31#
我建议使用
row_number()
来确定“rows per uid”,并使用select distinct
从结果中删除重复项。例如:字符串
| Stat1| Stat2| Stat3|注解| notes |
| --|--|--|--| ------------ |
| 一百一十六|十八个|四个|||
| 一一二○|二十六|八个|||
| 一百二十六|十八个|四个|||
| 一百一十六|十九岁|九个|||
| 一百二十六|十九岁|九个|||
| 二十六|十九岁|九个|||
| 1130|五个|一个|||
| 一一一二|八个|二个|||
| 一百三十|五个|一个|||
| 二十六|十八个|六个|<<表中有3个重复的数据行| << there are 3 duplicate rows of this data in the table |
fiddle