【发布时间】:2014-07-21 20:29:20
【问题描述】:
我需要在 Group By 语句中找到列的最早和最新(非 Null)值。
例子:
Bob 在某一天有多个购买记录。我需要在当天的一组记录中找到 Bob 的第一次和最后一次购买。
- Bob 于 2014 年 1 月 1 日下午 12:00 买了铅笔
- Bob 没有进行购买,但在 2014 年 1 月 1 日下午 1:00 签到
- Bob 于 2014 年 1 月 1 日下午 2:00 购买了纸张
所以我有三条记录,一条为空值,表示未进行购买。
我已使用以下查询来检索在某一天有多个员工记录的所有员工记录。
SELECT nameid,
Min(CONVERT(NVARCHAR(25), mdatetime, 10)) AS Date,
Count(*) AS Duplicates
-- <<<Get Earliest Purchase And Latest Purchase From each group Where Not Null>>>
FROM employee
GROUP BY nameid, CONVERT(NVARCHAR(25), mdatetime, 111)
HAVING Count(*) > 1
如果我只是检索最早的日期,使用 MIN(mDateTime) 可能该值将为空。我需要每个分组中最早的非空值和最新的非空值。
感谢您的指导和耐心。
警告:这是我实际编辑的代码的假设再现。场景、命名约定和完整性被缩写以简化和突出问题。
【问题讨论】:
-
我已经编辑了您的问题,将
WHERE替换为GROUP BY+HAVING子句(以及其他),因为我认为错误的语法不是您的问题的一部分,同意吗? -
当您说“所以我有三条记录,其中一条为空值,表示没有进行购买。”什么字段为空(保存空值的列的名称是什么)?日期时间?
-
您要计算所有重复的还是只计算购买的?
标签: sql sql-server-2012