在MySQL语句中使用DATEDIFF
-
22-08-2019 - |
题
这是作品使用DATEDIFF我的SQL语句:
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HREC
WHERE datediff (dd, '2006-05-05', getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
我需要与MAX(b134_recdate)像这样更换硬编码日期 '2006-05-05':
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HREC
where datediff (dd, MAX(b134_recdate), getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
但是我得到这个错误消息:
聚合不应出现在WHERE子句中,除非它是在含有HAVING子句或选择列表在子查询中,并且被聚合的列是外部引用。
不知道如何解决我的SQL语句?
解决方案
尝试
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HRE
where datediff (dd,
(select MAX(b134_recdate) from B134HRE)
, getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
其他提示
您是否尝试过移动这样的:
datediff (dd, MAX(b134_recdate), getdate()) > 90
要HAVING子句?
的SQL语句是:
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HRE
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
HAVING datediff (dd, MAX(b134_recdate), getdate()) > 90
此代码是SQL Server
我不知道,如果MAX是前人的精力对整个表:
DECLARE @MaxDate datetime
SELECT @MaxDate=MAX(b134_recdate) FROM B134HRE
/* if you don't want time you need to trim it from @maxDate*/
SELECT
SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HRE
where datediff (dd, @MaxDate, getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
或每组:
SELECT
SUM(b.b134_nettpay) AS Total, b.b134_rmcid, b.b134_recdate
FROM B134HRE b
INNER JOIN (SELECT
b134_rmcid, b134_recdate , MAX(b134_recdate) AS MaxDate
FROM B134HRE
GROUP BY b134_rmcid, b134_recdate
) dt ON b.b134_rmcid=dt.b134_rmcid AND b.b134_recdate=dt.b134_recdate
where datediff (dd, dt.MaxDate, getdate()) > 90
GROUP BY b.b134_rmcid, b.b134_recdate
ORDER BY b.b134_recdate DESC, b.b134_rmcid
但你可以给这些一试
不隶属于 StackOverflow