2

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

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

每个人多次出现,不同的 id 具有自动增量,我有 3 个字段,“Category”、“In”和“Out”

我试图实现的是一种让我知道桌子上的一些用户何时属于使用“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)

输出

  • 史密斯 A 类 2002 年 2010 年
  • 罗杰 B 类 2002 年 2010 年
  • 米勒 B 类 2008 年 2010 年
  • 巴勃罗 A 类 2002 年 2010 年

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

几点注意事项:不要问我为什么要这样开发这个解决方案,我只是偶然发现它并试图解决这个问题。我正在考虑在 php 中执行一个函数,根据我想要的要求过滤数据,因为我已经没有解决这个问题的想法了。如果您找到一种比我在这里看到的更好的方法来实现这一点,请成为我的客人,我对新想法持开放态度。

提前致谢。

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

4

2 回答 2

1

试一试:

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

SQL 小提琴示例

于 2012-07-24T15:43:21.663 回答
0

这似乎有效:

 select * from users a, users b where a.name = b.name and a.out + 1 = b.out

但是,如果多个用户具有相同的姓氏,并且假定出年比入年少一年,它将无法正常工作。

于 2012-07-24T15:47:51.717 回答