mysql返回两个最小值

标签 mysql

我有一个名为:workers 的表和一个名为:schedule 的表,其格式如下:

worker :

| id | name      | vacationA  | vacationB  | workhistory |
|  1 | Florin    | 2017-05-05 | 2017-05-25 | 2010-01-01  |
|  2 | Andrei    | 2017-06-05 | 2017-06-25 | 2010-01-01  |
|  3 | Alexandra | 2017-07-05 | 2017-07-25 | 2010-01-01  |
|  4 | Emilia    | 2017-08-05 | 2017-08-25 | 2010-01-01  |
|  5 | Nicoleta  | 2017-09-05 | 2017-09-25 | 2010-01-01  |
+----+-----------+------------+------------+-------------+

时间表:

| day | month | name      | shifts |
+-----+-------+-----------+--------+
|   1 |     6 | Florin    |      0 |
|   1 |     6 | Andrei    |      1 |
|   1 |     6 | Alexandra |      2 |
|   1 |     6 | Emilia    |      3 |
|   1 |     6 | Nicoleta  |      4 |
+-----+-------+-----------+--------+

我需要询问表“ worker ”,给我 2 个随机姓名,最少轮类数,并且 worker 不应该处于休假期间。此外,工作经历必须超过 18 个月。 在这种情况下,我需要的查询应返回 Florin 和 Andrei。

这是我到目前为止所得到的,但它没有按预期工作:

SELECT name FROM workers WHERE (CURDATE() NOT BETWEEN vacationA AND vacationB) AND workhistory > (DATE_SUB(CURDATE(), INTERVAL 18 MONTH)) AND name IN (SELECT name FROM schedule ORDER BY shifts LIMIT 2) ORDER BY RAND() LIMIT 2;

该查询返回 1235 - 此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

谢谢!

最佳答案

由于您已经在 schedule 表中获得了 name 列(尽管这不是一个好的设计),因此您不需要 join 。您可以将 ORDER BYLIMIT 一起使用,例如

SELECT name
FROM schedule
WHERE day ? AND month = ? --Remove this if there is no crriteria
ORDER BY shifts
LIMIT 2;

关于mysql返回两个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722138/

相关文章:

mysql - 如何在同一张表中找到相似的记录?

php - mysqli 不能与 apache 一起使用,但可以在 PHP 控制台上使用

php - 使用循环从多个 PHP 回显属性设置 CSS x 和 y

mysql - 如何使用 ruby​​ on Rails 从 mysql 获取当前时间和给定时间之间的事件

PHP从MySQL替换表情符号无法循环

mysql - google maps mysql查询查找公交车

php - post 方法不适用于 zend 框架中的表单装饰器

MySQL 如何创建从另一个表中进行选择的触发器?

sql - 帮助删除关系表

mysql - 创建带有时间戳的 mysql 输出文件