有一个表专门记录了ID、人名、上班日期,现要求得每周符合:周一至周五只休息一天,同时周六周日只休息一天的人员名单,写出 mysql 的 sql 语句。没有方向,请高手帮助。谢谢。 

解决方案 »

  1.   

    更新一下:员工单独一个表:ID、工号、姓名;
    考勤单独一个表:ID、日期、考勤。要求要得到考勤“正常”、日期范围为指定的某一周。
      

  2.   

    人员表
    --------------
    |ID|code|name|
    ==============
    | 1|1001|小王|
    --------------
    | 2|1002|小李|
    --------------考勤表
    --------------------------
    |ID|user|   date   |atten|
    ==========================
    | 1|   1|2009-11-10| 正常|
    --------------------------
    | 2|   2|2009-11-10| 正常|
    --------------------------
    | 3|   1|2009-11-11| 正常|
    --------------------------
    |         .......        |
    --------------------------
    |15|   1|2009-11-25| 正常|
    --------------------------
    (不是每个人都有考勤,有些人是没有考勤信息的)求my-sql语句:16号(周一)~20号(周五)只休息一天(没有考勤)的人 and 21号(周六)~22号(周日)只休息一天(没有考勤)的人的工号和姓名。
      

  3.   

    |ID|code|name|
    ==============
    | 1|1001|小王|
    | 2|1002|小李||ID|user|   date   |atten|
    ==========================
    | 1|   1|2009-11-10| 正常|
    --------------------------
    | 2|   2|2009-11-10| 正常|
    --------------------------
    | 3|   1|2009-11-11| 正常|
    --------------------------
    |15|   1|2009-11-25| 正常|
    --------------------------
    如果按以上建表,并使用这些数据,那么你期望的正确结果是什么?建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。给出你的 create table 语句
    insert into 语句以及最重要的,正确的结果是什么样的?当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  4.   

    CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL auto_increment,
      `code` char(6) NOT NULL COMMENT '工号',
      `name` char(8) NOT NULL COMMENT '姓名',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;INSERT INTO `user` (`code`, `name`) VALUES
    ('1001', '小李'),
    ('1002', '小王');-----------------------------------------------------CREATE TABLE IF NOT EXISTS `atten` (
      `id` int(11) NOT NULL auto_increment,
      `user` int(11) NOT NULL,
      `date` date NOT NULL,
      `atten` char(6) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;INSERT INTO `atten` (`user`, `date`, `atten`) VALUES
    (1, '2009-11-10', '正常'),
    (2, '2009-11-10', '正常'),
    (1, '2009-11-11', '正常'),
    (2, '2009-11-11', '正常'),
    (1, '2009-11-12', '正常'),
    (1, '2009-11-13', '正常'),
    (2, '2009-11-14', '正常'),
    (1, '2009-11-15', '正常'),
    (1, '2009-11-16', '正常'),
    (1, '2009-11-17', '正常'),
    (1, '2009-11-18', '正常');------------------------------------------------我要得到:2009-11-10~2009-11-18只有一天休息的人的名单(即小李)
      

  5.   

    2009-11-10~2009-11-18 这个和你在顶楼所谓的 "根据星期" 好象很难去理解。下面是基于你  #7楼 的说明写的。我要得到:2009-11-10~2009-11-18只有一天休息的人的名单(即小李)
    2009-11-10~2009-11-18 一共九天,mysql> select * from user;
    +----+------+------+
    | id | code | name |
    +----+------+------+
    |  1 | 1001 | 小李 |
    |  2 | 1002 | 小王 |
    +----+------+------+
    2 rows in set (0.00 sec)mysql> select * from atten;
    +----+------+------------+-------+
    | id | user | date       | atten |
    +----+------+------------+-------+
    |  1 |    1 | 2009-11-10 | 正常  |
    |  2 |    2 | 2009-11-10 | 正常  |
    |  3 |    1 | 2009-11-11 | 正常  |
    |  4 |    2 | 2009-11-11 | 正常  |
    |  5 |    1 | 2009-11-12 | 正常  |
    |  6 |    1 | 2009-11-13 | 正常  |
    |  7 |    2 | 2009-11-14 | 正常  |
    |  8 |    1 | 2009-11-15 | 正常  |
    |  9 |    1 | 2009-11-16 | 正常  |
    | 10 |    1 | 2009-11-17 | 正常  |
    | 11 |    1 | 2009-11-18 | 正常  |
    +----+------+------------+-------+
    11 rows in set (0.00 sec)mysql> select u.id,u.name
        -> from user u inner join atten a on u.id=a.user
        -> where a.date between '2009-11-10' and '2009-11-18'
        -> group by u.id,u.name
        -> having count(*)=8;
    +----+------+
    | id | name |
    +----+------+
    |  1 | 小李 |
    +----+------+
    1 row in set (0.00 sec)mysql>
      

  6.   

    显示你的 
    show create table user;
    show create table atten;
    select * from user;
    select * from atten;希望你楼上提供的测试数据和你自己的数据是一致的。不要你自己用一套,然后提供给别人另一套。这种测试还有什么意义?