باستخدام datediff في بيان الخلية
-
22-08-2019 - |
سؤال
وهذا هو بيان SQL بلدي أن يعمل باستخدام datediff:
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
وأنا بحاجة إلى استبدال تاريخ ضمنية '2006-05-05' مع MAX (b134_recdate) مثل ذلك:
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
وأنا لست متأكدا مما إذا كان MAX sould يكون للجدول بأكمله:
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
ولكن هل يمكن أن تعطي هذه المحاولة