SQL使用之间和多次出现的问题

时间:2012-07-24 15:23:08

标签: mysql sql

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

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

每个人有多个出现,不同的id有自动增量,我有3个字段,“类别”,“在”和“出”

我正在尝试实现的是一种让我知道桌面上的某些用户何时属于使用“In”和“Out”作为限制的系统的方式。

实施例

  • 用户A - A类 - 2002年至2010年
  • 用户A - B类 - 2011年OUT 9999
  • 用户B - B类 - 2002年至2010年

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

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

对于用户B,他不应属于该系统,因为2010 +

没有新的条目

最后,我要为2010年提供以下输出

  • Smith A类
  • Pablo A类

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

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

输出

  • 史密斯A类2002年出版2010
  • Roger B类2002年出版2010
  • Miller B类2008年出版2010
  • Pablo A类2002年出版2010

但罗杰和米勒在2010年离开了这个系统,所以他们不应该在2010年成为会员,史密斯和巴勃罗在2010年改变他们的类别,所以他们应该在输出中显示。

一些注意事项: 不要问我为什么这个解决方案是这样开发的,我只是偶然发现并尝试解决这个问题。 我正在考虑在php中执行一个功能,根据我想要的要求过滤数据,因为我已经没有想法来解决这个问题了。 如果你找到一种方法来实现这一点比我在这里看到的更好,做我的客人,我会接受新的想法。

提前致谢。

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

2 个答案:

答案 0 :(得分:1)

给这个人一个机会:

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

SQL Fiddle Example

答案 1 :(得分:0)

这似乎有效:

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

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