答案 0 :(得分:2)
这看起来像RANK()
的情况见这个例子:
SELECT EmployeeCode
, Timestamp
, Value
FROM (
SELECT RANK() OVER (PARTITION BY EmployeeCode ORDER BY Timestamp) AS RN
, EmployeeCode
, Timestamp
, Value
FROM dbo.SampleTable
) AS ST
WHERE ST.RN = 1;
它将为每一行生成一个数字(1,2,3,4 ...... n)。
请注意,我正在执行PARTITION BY
,它会为每个不同的EmployeeCode重置数字。因此,此查询几乎为每个员工生成唯一编号,并且它取决于时间戳值。最低时间戳值将为1。
官方文档说
如果两个或更多行绑定排名,则每个绑定的行都会收到相同的排 秩。例如,如果两个顶级销售人员具有相同的SalesYTD 价值,他们都排名第一。销售人员排名第二 SalesYTD排名第三,因为有两行 排名更高。因此,RANK函数并不总是返回 连续整数。
由于您只提供了屏幕截图,我在行旁边添加了快速数字。所以你可以想象它是如何看的。
答案 1 :(得分:0)
试试这个:
select min(timestamp), employeeCode from table_name where employeeCode in (select employeeCode from table_name group by employeeCode)
答案 2 :(得分:0)
我认为一个基本的小组将会做到这一点:
public function defaultScope()
{
return array(
'condition' => $this->getTableAlias(false, false) . '.mode = "main"',
);
}
答案 3 :(得分:0)
You can use Row_number() also to generate minimum result :
SELECT EMPLOYEECODE,
TIMESTAMP,
VALUE
FROM (SELECT Row_number()
OVER (
PARTITION BY EMPLOYEECODE
ORDER BY TIMESTAMP)RN,
EMPLOYEECODE,
TIMESTAMP,
VALUE
FROM TABLE)A
WHERE RN = 1