首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询以获得带有某些条件的最后一组不同的记录

SQL查询以获得带有某些条件的最后一组不同的记录
EN

Stack Overflow用户
提问于 2012-12-26 19:06:20
回答 3查看 1.1K关注 0票数 1

我有下表:

我试图找到一种方法来获取那些过期客户的记录,然后相应地更新表(我的意思是在相关客户的customer_id中添加一条新记录,其中条目“服务过期”)。

如果您查看表的底部,您将注意到已有客户的条目“服务过期”(customer_id 11和16)有两条记录。

我正在寻找一个SQL查询,它将:

  1. 通过customer_id获取最后一组不同的记录
  2. 从结果集中排除相同customer_id的记录,这些结果集的条目“服务过期”或表中后面出现的status_id为2

如果我使用以下方法:

代码语言:javascript
复制
SELECT MAX(id) FROM mytable WHERE status_id != '2' AND expiry < '2012-12-26 19:00:00' GROUP BY customer_id

它将返回id 1、11、13和16。但是,我不需要id 11和16,因为过期状态已经在表的后面记录到了(请参阅表的最后两条记录),id 1已经被更新,在稍后的id 3中可以看到更新的到期日期。我想要的是id 13,因为这是唯一没有“服务过期”条目的过期记录,该条目稍后会出现在表中。

我正在寻找一个SQL查询,它将使我能够捕获这个需求。

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-26 20:20:35

经过一番周旋之后,我终于想出了一个解决办法:

代码语言:javascript
复制
SELECT MAX(id) 
FROM mytable
WHERE status_id != '2' 
    AND expiry < '2012-12-26 19:00:00' 
    AND customer_id NOT IN (SELECT MAX(customer_id) FROM mytable WHERE status_id = '2' GROUP BY customer_id) 
GROUP BY customer_id

谢谢@木星P5为我指明了正确的方向。

致以敬意,

票数 1
EN

Stack Overflow用户

发布于 2012-12-26 19:12:48

效率不高,但这应该管用。

代码语言:javascript
复制
SELECT MAX(id)
FROM mytable
WHERE status_id != '2'
    AND expiry < '2012-12-26 19:00:00'
    AND id NOT IN (SELECT id FROM mytable where status_id = 2)
GROUP BY customer_id

编辑:错过了更新的服务案例。如果我想到什么我会更新的。

票数 0
EN

Stack Overflow用户

发布于 2012-12-26 19:13:22

您的要求相当于在记录上最后一次过期后查找"n“记录。以下查询将返回给定客户的最后一次到期后的所有记录:

代码语言:javascript
复制
select t.*
from t join
     (select t.customer_id, MAX(id) as maxid
      from t
      where status_id = 2
     ) texp
     on t.customer_id = texp.customer_id and
        t.id > texp.maxid

通过巧妙地使用变量,您可以枚举这些变量以获得最后的"n“。但是,你真的需要一个固定的数字吗?为什么不是所有的人?为什么不只是其中之一?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档