在询问之前我没有经常搜索过,因为我感觉搜索字符串很复杂。
我会通过例子而不是描述来询问。
我有一个名为user_sale的表
id emp_id emp_name emp_location date sales
------------------------------------------------------
1 111 mr.one A 2013/07/17 5000
2 111 mr.one C 2013/07/14 6000
3 222 mr.two B 2013/06/15 5500
等等。
在输出中,我想要所有字段,但希望在一个月内最新的emp_location。 我能够从日期开始获得月份和年份。所以我可以按年和月分组。
预期产出:
id emp_id emp_name emp_location date sales
------------------------------------------------------
1 111 mr.one A 2013/07/17 5000
2 111 mr.one A 2013/07/14 6000
3 222 mr.two B 2013/06/15 5500
一种解决方案是使用同一个表连接,但由于该表包含大量数据,因此它似乎不是一个合适的解决方案。
答案 0 :(得分:0)
您可以使用窗口功能,以获取每位员工的最新数据:
SELECT *
FROM
(SELECT *,
row_number() OVER (PARTITION BY emp_name ORDER BY date_sales DESC) AS pos
FROM user_sale
) AS rankem
WHERE pos = 1;
我不太清楚你想要什么,但我想你可以加入那个子查询来获得你需要的东西。
答案 1 :(得分:0)
使用window function first_value()
获取另一列(emp_location
)定义的一列(date
)的“第一个”,嵌入其他未更改的行:
SELECT id, emp_id, emp_name
, first_value(emp_location) OVER (PARTITION BY emp_id
ORDER BY date DESC) AS emp_location
, date, sales
FROM user_sale
ORDER BY id;
假设emp_id
在您定义时每个组都是唯一的。
除此之外:您不应该使用date
(reserved word in SQL standard)或id
(非描述性)作为列名。