gpt4 book ai didi

mysql - 使用 between 和 multiple occurrences 的 SQL 出现问题

转载 作者:行者123 更新时间:2023-11-29 03:08:34 25 4
gpt4 key购买 nike

大家。我是新来的,我有一个关于 SQL 的问题,我认为用 SQL 可能很容易做到,但我没有想法,我可以使用一些帮助来解决我的问题。

所以我有一个表(sql也在这里http://www.sqlfiddle.com/#!2/b9a37/1/0)

每个人多次出现,不同的 ID 自动递增,我有 3 个字段,“类别”、“输入”和“输出”

我试图实现的是一种让我知道 table 上的某些用户何时属于使用“In”和“Out”作为限制的系统的方法。

例子

  • 用户 A - 类别 A - IN 2002 OUT 2010
  • 用户 A - 类别 B - IN 2011 OUT 9999
  • 用户 B - 类别 B - IN 2002 OUT 2010

在上面的例子中,我想知道 2010 年谁属于系统:

所以对于用户 A,他在 2010 年离开类别 A,但在 2011 年加入类别 2011,因此他应该在 2010 年成为类别 A 的用户

对于用户 B,他不应该属于系统,因为 2010+ 没有新条目

最后,我想在 2010 年获得以下输出

  • 史密斯 A 类
  • 巴勃罗 A 类

例如,我没有达到我想要的结果

SELECT * from users
WHERE (users.In<=2010 and users.Out=2010)

输出

  • Smith A 类 2002 年 2010 年结束
  • Roger B 类 2002 年 2010 年结束
  • Miller B 类 2008 年 2010 年结束
  • Pablo A 类 2002 年 2010 年结束

但 Roger 和 Miller 在 2010 年离开了系统,因此他们在 2010 年不应成为成员,而 Smith 和 Pablo 在 2010 年以后更改了他们的类别,因此他们应该显示在输出中。

一些注意事项:不要问我为什么要这样开发这个解决方案,我只是偶然发现并试图解决这个问题。我正在考虑在 php 中做一个函数,根据我想要的要求过滤数据,因为我没有办法解决这个问题。如果您找到比我在这里看到的更好的方法来实现这一点,请成为我的客人,我乐于接受新想法。

提前致谢。

最后说明:也许使用 http://www.sqlfiddle.com/#!2/b9a37/1/0并尝试找到所需的输出将帮助您。

最佳答案

试一试:

select Name, Category
from users
where `In` <= 2010 and (
`Out` > 2010 or name in (
select name
from users
where `In` = 2011
)
)

SQL Fiddle Example

关于mysql - 使用 between 和 multiple occurrences 的 SQL 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11634107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com