如何在列的子集上进行分组选择

时间:2014-06-02 08:14:02

标签: sql group-by

SELECT DATEPART(yy, date1) AS YEAR,
       DATEPART(mm, date1) AS MONTH,
       DATEPART(dd, date1) AS DAY,
       DATEPART(hh, date1) AS hour ,
       min(DATEPART(mi, date1)) AS MINUTE,
       DATEDIFF(mi, date1, date2) AS aaa
FROM mytb with(nolock)
GROUP BY DATEPART(yy, date1),
         DATEPART(mm, date1),
         DATEPART(dd, date1),
         DATEPART(hh, date1),
         DATEPART(mi, date1)
ORDER BY DATEPART(yy, date1) ,
         DATEPART(mm, date1),
         DATEPART(dd, date1),
         DATEPART(hh, date1),
         DATEPART(mi, date1)

此Sql无效,我不想将DATEDIFF(mi, date1, date2)添加到group by子句中。解决方案是什么?

2 个答案:

答案 0 :(得分:0)

找到答案:
我需要使用像min,sum等聚合函数。

在我的代码中
select .... max(DATEDIFF(mi, date1, date2))

答案 1 :(得分:0)

您需要按所有非聚合分组才能像这样编写查询。如果任何date1值只有一个可能的date2值,则可以更改

DATEDIFF(mi, date1, date2)

min(DATEDIFF(mi, date1, date2))

避免聚合(因为它是聚合)。

您也无法解释为什么您不想按DATEDIFF(mi,date1,date2)分组,所以如果上述内容不足,您可以编辑问题以准确解释您的尝试要做的事情,最好是一些样本数据和所需的结果。