SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
আমি পাই
"অবৈধ কলামের নাম দিবস"।
ম্যাক্সলগটিম একটি তারিখের ক্ষেত্র। এটি ছোট জিনিস যা আমাকে পাগল করে তোলে।
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
আমি পাই
"অবৈধ কলামের নাম দিবস"।
ম্যাক্সলগটিম একটি তারিখের ক্ষেত্র। এটি ছোট জিনিস যা আমাকে পাগল করে তোলে।
উত্তর:
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)
সাধারণত আপনি এই দলে ফিল্ডের উপাধি উল্লেখ করতে পারবেন না WHERE
। (এটিকে SELECT
এলিয়াস সহ পুরো হিসাবে বিবেচনা করুন , WHERE
ধারাটির পরে প্রয়োগ করা হয়েছে ))
তবে, অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, আপনি SELECT
এসকিউএলকে ক্লজটির আগে পরিচালনা করতে চিকিত্সা করতে বাধ্য করতে পারেন WHERE
। যৌক্তিক ক্রিয়াকলাপটি পরিচালনা করার জন্য বা একটি সাধারণ টেবিল এক্সপ্রেশন (সিটিই) দিয়ে সাধারণত এটি প্রথম বন্ধনীর সাহায্যে করা হয়:
প্রথম বন্ধনী / Subselect:
SELECT
*
FROM
(
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
) as innerTable
WHERE daysdiff > 120
অথবা এর একটি সিটিই সংস্করণের জন্য অ্যাডামের উত্তর দেখুন।
HAVING
এমএস-এসকিউএল সহ বেশিরভাগ এসকিউএল পরিবেশে উত্তরটি কাজ করে না যা এই প্রশ্নটি নিয়ে রয়েছে। (টি-এসকিউএলএর HAVING
জন্য একটি সামগ্রিক ফাংশন প্রয়োজন))
আপনি যদি নিজের ধারাটিতে উপনামটি ব্যবহার করতে চান তবে আপনাকে WHERE
এটি একটি সাব- সিলেক্টে বা মোড়কে আবদ্ধ করতে হবে :
WITH LogDateDiff AS
(
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
)
SELECT logCount, logUserId, maxlogtm, daysdiff
FROM LogDateDiff
WHERE daysdiff > 120
আপনার কোড পুনরায় ছাড়া এটা করতে সবচেয়ে কার্যকর উপায় ব্যবহার করে আমরা সহজেই পরিবর্তে কোথায়
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
HAVING daysdiff > 120
HAVING
এলিয়াসগুলিতে ব্যবহার করা মানসম্পন্ন নয় (যদিও এটি মাইএসকিউএলে কাজ করে)। বিশেষত, আমি মনে করি এটি এসকিউএল সার্ভারের সাথে কাজ করে না।
[S0001][207] Invalid column name 'daysdiff'
[S0001][8121] Column 'day' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.
আপনি যদি সিটিইতে আপনার সমস্ত কলামগুলি তালিকাবদ্ধ করতে না চান, তবে এটির আর একটি উপায় হ'ল outer apply
:
select
s.logcount, s.logUserID, s.maxlogtm,
a.daysdiff
from statslogsummary as s
outer apply (select datediff(day, s.maxlogtm, getdate()) as daysdiff) as a
where a.daysdiff > 120
আপনি কলামের নামটি উল্লেখ করতে পারেন তবে আপনাকে এটি ব্যবহার করে সংজ্ঞা দিতে হবে CROSS/OUTER APPLY
:
SELECT s.logcount, s.logUserID, s.maxlogtm, c.daysdiff
FROM statslogsummary s
CROSS APPLY (SELECT DATEDIFF(day, s.maxlogtm, GETDATE()) AS daysdiff) c
WHERE c.daysdiff > 120;
পেশাদাররা:
WHERE/GROUP BY/ORDER BY
sql-server
এবং এর সাথে t-sql
:)
এখানে এসে অনুরূপ কিছু খুঁজছেন, কিন্তু একটি মামলা যখন, এবং যেখানে এই মত ব্যবহার শেষ হয়েছে: WHERE (CASE WHEN COLUMN1=COLUMN2 THEN '1' ELSE '0' END) = 0
হয়ত আপনি ব্যবহার করতে পারে DATEDIFF
মধ্যে WHERE
সরাসরি। কিছুটা এইরকম:
SELECT logcount, logUserID, maxlogtm
FROM statslogsummary
WHERE (DATEDIFF(day, maxlogtm, GETDATE())) > 120
`daysdiff`
।