我有以下数据库表
以下是我的样本数据。
我想弄清楚如何编写查询以选择所有apntoken for userid =' 20'通过deviceid进行分组,然后通过apntoken进行分组(除了它应该显示最近的apntoken)。
我尝试过的一些问题就是这个。
SELECT
DISTINCT apntoken,deviceid,created
FROM `distribution_mobiletokens`
WHERE userid='20'
GROUP BY deviceid
返回以下结果。
请注意,日期不是最新日期。我添加了一个名为“最新消息”的虚假条目。在我将其日期设定为未来的地方。
我试过的另一个问题就是这个。
SELECT
DISTINCT apntoken,deviceid,created
FROM `distribution_mobiletokens`
WHERE userid='20'
GROUP BY deviceid,apntoken
然而,这个问题是我现在有了额外的deviceid数据,因为它不再独特了吗?
参考图片
我不确定如何修改此查询以执行此操作或是否可以轻松实现此操作?
例如,我应该只使用我已经获得的数据' 2'领域。一个用于deviceid 5628CF60-D0CF-479A-A944-A3496E085FC8& 948D9BAD-B164-4830-ACEB-08A089A80558就像在我试过的第一个查询的图片中一样,但它应该显示说出来的最新消息'
我需要这个的原因是我总是发送最新的'标记为苹果,用于特定设备的推送通知。每次用户登录设备都是相同的,但是apntoken可以是不同的。所以我想如果我可以从设备中获取最新的apntoken用户,这将有所帮助。
我尝试的其他查询
SELECT apntoken,deviceid,created
FROM `distribution_mobiletokens`
WHERE userid='20'
GROUP BY deviceid ORDER BY created DESC
请注意,它不显示应显示日期
的latestone答案 0 :(得分:1)
构建此SQL的最佳方法是使用not exists
子句,如下所示:
SELECT apntoken,deviceid,created
FROM `distribution_mobiletokens` as dm
WHERE userid='20'
and not exists (
select 1
from `distribution_mobiletokens`
where userid = '20'
and deviceid = dm.deviceid
and created > dm.created
)