0

在询问之前我没有进行很多搜索,因为我觉得搜索字符串写起来很复杂。

我将通过示例而不是描述来询问。

我有一张名为 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

一种解决方案是加入同一张表,但由于该表包含大量数据,它似乎不是一个合适的解决方案。

4

2 回答 2

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;

我不太清楚你到底想要什么,但我想你可以加入那个子查询来获得你需要的东西。

于 2013-07-17T03:06:28.223 回答
0

使用窗口函数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您定义的每个组都是唯一的。

另外:您不应该使用dateSQL 标准中的保留字)或id(非描述性)作为列名。

于 2013-07-17T03:54:05.773 回答