我最近编写了一个查询,我必须将时间戳转换为日期,然后在转换日期执行聚合。因此,一个微不足道的方法是在分组中使用转换公式(与创建列时相同),它确实有用。
然而,它似乎并不是最优化的方式。我觉得性能会恶化。有没有更好的方法呢?
查询使用了一个视图,其结构如下:
SELECT ORG ,
CONVERT(DATE, CREATION_DATE, 101) ,
SKU_CODE ,
SKU_NAME ,
COUNT(UNIT) AS Production
FROM dbo.abcd_efgh_ijk(123, 'abc', NULL, '10009', NULL,
'2014-11-01 00:00:00', '2014-11-30 23:59:59') SFSTAT
WHERE PASS_DATETIME IS NOT NULL
GROUP BY ORG ,
SKU_CODE ,
CONVERT(DATE, CREATION_DATE, 101) ,
SKU_NAME
HAVING COUNT(UNIT) >= 100;
很高兴在这里学习优化。
答案 0 :(得分:0)
据我所知,这是无法完成的,但是您可以通过一个简单的子查询轻松解决该问题:
SELECT ORG ,
CreationDate ,
SKU_CODE ,
SKU_NAME ,
COUNT(UNIT) AS Production
FROM (
SELECT
ORG ,
CONVERT(DATE, CREATION_DATE, 101) AS CreationDate,
SKU_CODE ,
SKU_NAME ,
UNIT,
PASS_DATETIME,
FROM
dbo.abcd_efgh_ijk(123, 'abc', NULL, '10009', NULL,
'2014-11-01 00:00:00', '2014-11-30 23:59:59')
) SNMFT
WHERE PASS_DATETIME IS NOT NULL
GROUP BY ORG ,
SKU_CODE ,
CreationDate,
SKU_NAME
HAVING COUNT(UNIT) >= 100;