我有一张表格,上面有员工的数据,工作地点和销售量。这些员工每隔几个月就会从商店搬家。
有时,当员工搬家时,由于商业原因,他的部分销售仍会记入旧的销售地点。
以下是数据的快照:
location_id | employee_id | name | unit_sold | month
2 | abc | john |12 | 3
1 | abc | john |1 | 3
5 | rst | bob |11 | 2
2 | qwe | tim |12 | 3
1 | gsd | jim |1 | 3
1 | uio | joe |11 | 3
1 | abc | john |50 | 1
请注意,约翰已在第3个月在2个地点工作。在地点= 1时,他卖出了1个物品,地点= 2,他卖掉了12个。他的实际工作地点是最近查询月份的unit_sold较高的地点。另请注意,约翰在第一个月的位置= 1处售出了50个单位,但这不是他在月份= 3的工作地点。
以下是我的查询需要做的事情:
获取在位置工作的所有当前员工的列表=?在时间范围x到y期间。
当前意味着它们必须在最近一个月仍然有效。此外,如果一名员工在该时间范围的最近一个月内在多个地点工作,那么只有在被查询的地点是他当月销售的单位数最多的地方时才应包括在内。
到目前为止,这是我的尝试。
SELECT
employee_id,
NAME
FROM
mytable
WHERE location_id = '1'
AND month BETWEEN '1'
AND '3'
AND (employee_id, `month`, location_id) IN
(SELECT
employee_id,
`month`,
location_id
FROM
mytable
WHERE month BETWEEN '1'
AND '3')
GROUP BY employee_id
它还会在响应中返回订单员工。
以下是SQLFiddle
答案 0 :(得分:0)
这是有效的。检查问题中的SQL小提琴。
需要高度优化这一点。
SELECT * FROM
(SELECT * FROM
(SELECT * FROM mytable
WHERE `month` = 3
ORDER BY `month` DESC,
units_sold DESC) a
GROUP BY employee_id) j
WHERE location_id = 1