mysql - 如何从具有条件的重复日期行中仅选择一行

标签 mysql

我有一个如下所示的结果集,这是我从下面提到的查询中获得的:

LEAVE_DATE  | RESOURCE_ID | TYPE
2016-05-17 |    1         | SELF
2016-05-27 |    1         | SELF
2016-05-30 |    0         | ORG
2016-05-30 |    1         | SELF

下面是给出上述结果集的 SQL:

SELECT CONVERT(v.START_DATE + INTERVAL t.n - 1 DAY USING utf8) LEAVE_DATE, v.RESOURCE_ID, v.TYPE
FROM date_tbl t,tbl_leave v
WHERE t.n <= DATEDIFF(v.END_DATE, v.START_DATE) + 1
AND RESOURCE_ID IN (1,0)
AND DAYOFWEEK(CONVERT(v.START_DATE + INTERVAL t.n - 1 DAY USING utf8)) NOT IN (1,7)
ORDER BY LEAVE_DATE

我希望我的 SQL 应返回所有唯一日期,但如果在 RESOURCE_ID 0 和 1 中发现重复日期,我想选择 RESOURCE_ID 0。

预期结果:

LEAVE_DATE  | RESOURCE_ID | TYPE
2016-05-17 |    1         | SELF
2016-05-27 |    1         | SELF
2016-05-30 |    0         | ORG

您能给我一些建议吗?我应该如何实现这个结果?

最佳答案

首先,您进行选择以获取所有值,然后按resource_id对其进行排序,然后将得到的结果按leave_date进行分组。 分组依据将获得重复的第一行。

SELECT * FROM 
(
SELECT CONVERT(v.START_DATE + INTERVAL t.n - 1 DAY USING utf8) LEAVE_DATE, v.RESOURCE_ID, v.TYPE
FROM date_tbl t,tbl_leave v
WHERE t.n <= DATEDIFF(v.END_DATE, v.START_DATE) + 1
AND RESOURCE_ID IN (1,0)
AND DAYOFWEEK(CONVERT(v.START_DATE + INTERVAL t.n - 1 DAY USING utf8)) NOT IN (1,7)
ORDER BY v.RESOURCE_ID
)as x GROUP BY x.LEAVE_DATE

关于mysql - 如何从具有条件的重复日期行中仅选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435576/

相关文章:

php - MySQL 统计特定记录

MySQL 按降序排列

mysql - 导出数据库 - 未知或不正确的时区

php - Symfony 'SQLSTATE[HY000] [1049] Unknown database ' symfony''

php - 无法获取要显示的用户信息

php - 取不同值Mysql与PHP相乘

php - 获取先前的数组值

java - 如何在 gwt 中管理 Mysql 图像响应?

python - 在 MySQL 上使用列表创建列

php - 无符号非空 mySql