簡體   English   中英

篩選SQL表中的最新客戶端版本

[英]Filter for most recent client version in SQL table

因此,我有一個數據庫,並且我使用了select / join語句來嘗試根據應用程序用戶玩過的游戲數量及其設備上的信息來創建排行榜。

我的問題是,如果一個用戶下載了該應用程序的多個發行版本,則該數據庫包含多個行。 我的桌子看起來像:

+--------+---------+----------+-------------+
|# games | user id | platform | app version |
+--------+---------+----------+-------------+
|   15   |   1     |     ios  |   3.2.1     |
+--------+---------+----------+-------------+
|   13   |   2     | android  |   2.0.3     |
+--------+---------+----------+-------------+
|   13   |   2     | android  |   3.2.1     |
+--------+---------+----------+-------------+
|   13   |   2     | android  |   3.1.0     |
+--------+---------+----------+-------------+
|   11   |   3     |     ios  |   3.1.5     |
+--------+---------+----------+-------------+

有沒有一種方法可以將具有多個行(使用了多個版本)的每個唯一用戶ID合並為僅包含最新版本信息的一行? 也就是說,上表將合並為:

+--------+---------+----------+-------------+
|# games | user id | platform | app version |
+--------+---------+----------+-------------+
|   15   |   1     |     ios  |   3.2.1     |
+--------+---------+----------+-------------+
|   13   |   2     | android  |   3.2.1     |
+--------+---------+----------+-------------+
|   11   |   3     |     ios  |   3.1.5     |
+--------+---------+----------+-------------+

如果您想從一行中獲取所有詳細信息,但要根據一列中的最大值(或最小值或其他值)進行過濾,則可以采用許多不同的方式進行操作。

一種方法是在您與之聯接的派生表中查找每個用戶的最大應用程序版本行,以過濾返回的行,另一種方法是使用相關的not exists查詢來檢查同一行是否不存在任何行使用更高版本應用程序(和相同平台)的用戶。

這兩個查詢與第一個查詢並不完全相同,沒有將平台考慮在內,但是如果您願意,可以將其添加到派生表中,並按分組進行聯接。

select t1.* 
from your_table t1
inner join (
  select `user id`, max(`app version`) as max_app_version
  from your_table 
  group by `user id`
) t2 
on t1.`user id` = t2.`user id` 
and t1.`app version` = t2.max_app_version;


select t1.* 
from your_table t1
where not exists (
  select 1 from your_table 
  where `app version` > t1.`app version`
  and `user id` = t1.`user id`
  and platform = t1.platform
);

示例SQL提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM