【问题标题】:How to get the rows that have min timestamp using SQL [closed]如何使用 SQL 获取具有最小时间戳的行 [关闭]
【发布时间】:2015-10-08 05:53:08
【问题描述】:

有人能帮我解决这个问题吗? (见下图)

Sample Table

what should be the result

【问题讨论】:

  • 你想要每个 id 的最小时间戳吗?你的时间戳是日期时间格式吗?
  • 你好@Arvaan 是的,它是对应的值。您可以在提供的链接上查看示例图片。
  • 欢迎来到stackoverflow。请阅读How to Ask
  • 选项一:实际阅读一些 SQL 文档并提出您自己的(还不太可行)方法。然后我们来看看 - 选项二:等着看sql server的人是否乐于提供帮助

标签: sql sql-server sql-server-2008 sqlite


【解决方案1】:

这看起来像是 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 函数并不总是返回 连续整数。

由于您只提供了屏幕截图,因此我在行旁边添加了一个快速数字。所以你可以想象它的样子。

【讨论】:

  • 你好@Evaldas Buinauskas,感谢您的详细解释,注意到了。 :) 关于您提供的代码,我有一些问题。结果大错特错。
  • 哪里不对?最好发布一个查询来生成一些数据,而不是截图。这将有助于建立查询。 :)
  • 您好@Evaldas Buinauskas,我想发布我的代码,但我认为,如果我发布需要输出的屏幕截图,我的问题会更容易理解。
  • 您只需将一些示例数据作为文本和预期输出发布。
  • 您好,这是我使用您提供的代码时的示例数据结果。请点击链接。 :) imgur.com/pPh48B6
【解决方案2】:

试试这个:

select min(timestamp), employeeCode from table_name where employeeCode in (select employeeCode from table_name group by employeeCode)

【讨论】:

  • 您好@Arvaan,我使用了您上面提供的代码,不幸的是,缺少列值(就像示例图片中的一样)。
  • 哎呀。我以为是你的输入表
  • 你好@Arvaan,表中没有包含值列。
【解决方案3】:

我认为一个基本组就可以解决问题:

SELECT employeeCode, value, min(timestamp)
FROM table
GROUP BY employeeCode, value

【讨论】:

  • 您好@Zohar,我尝试了您的代码,但它显示了列值及其时间戳和员工代码中的所有项目。我需要的只是 min(Timestamp) 和它的 EmployeeCode 和它的值。 (就像我上面提供的图片所示)
【解决方案4】:
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 

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2017-05-12
    • 1970-01-01
    • 2021-11-20
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多