سؤال

وهذا هو بيان 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

ولكن هل يمكن أن تعطي هذه المحاولة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top