MYSQL-根据列值获取第一条记录

时间:2020-10-10 10:26:13

标签: mysql sql eloquent greatest-n-per-group window-functions

我有以下employee_sequence表

| id | employee_id | sequence_id | is_completed |
|----|:-----------:|:-----------:|:------------:|
| 1  |      12     |      3      |       1      |
| 2  |      12     |      4      |       1      |
| 3  |      10     |      3      |       1      |
| 4  |      10     |      4      |       0      |

我正在寻找如何在1个查询中获取员工的is_completed = 0的第一行。如果该员工没有这样的行,则采用is_completed = 1

的第一行

employee_id = 12(不存在is_completed = 0,因此第一行具有is_completed = 1)的示例

| id | employee_id | sequence_id | is_completed |
|----|:-----------:|:-----------:|:------------:|
| 1  |      12     |      3      |       1      |

employee_id = 10(第一行具有is_completed = 0)的示例

| id | employee_id | sequence_id | is_completed |
|----|:-----------:|:-----------:|:------------:|
| 4  |      10     |      4      |       0      |

3 个答案:

答案 0 :(得分:1)

如果yu正在运行MySQL 8.0,则可以使用row_number()。假设可以使用id来对记录进行排序,则可以这样写:

select *
from (
    select es.*, row_number() over(partition by employee_id order by is_completed, id) rn
    from employee_sequence es
) es
where rn = 1

在更高级的版本中,另一种选择是带有行限制子句的相关子查询:

select *
from employee_sequence es
where es.id = (
    select es1.id
    from employee_sequence es1
    where es1.employee_id = es.employee_id
    order by es1.is_completed, es.id
    limit 1
)

答案 1 :(得分:1)

如果您要每个员工这个 (如您的问题所建议):

public static void removeMid(ArrayList<Integer> o){
int i=0;
    int low=0;
    int high=o.size()-1;
    int mid=(high+low)/2;
    
    
    if(o.get(i)!=mid)
    return ;
        else if(o.get(i)==mid) {
            o.remove(i);
    System.out.println(o.get(i)); //return mid element
        
    System.out.println(o);
    removeMid(o);
        }}```
    
    

Here是db <>小提琴。

答案 2 :(得分:0)

如果运行的内容少于MySql 8,则:

select * from employee_sequence e1
where e1.id = (
  select e2.id
  from employee_sequence e2
  where e2.employee_id = e1.employee_id
  order by e2.is_completed, e2.sequence_id
  limit 1
);


| id  | employee_id | sequence_id | is_completed |
| --- | ----------- | ----------- | ------------ |
| 1   | 12          | 3           | 1            |
| 4   | 10          | 4           | 0            |

View on DB Fiddle