我有一个如下所示的结果集,这是我从下面提到的查询中获得的:
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/