আমি পার্টিতে বেশ দেরি করেছি, তবে এটি বিদ্যমান উত্তরের কোনওটিতে উপস্থিত হয় না:
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', date_column) / 10 * 10, '2000')
10
এবং MINUTE
পদ যেকোন নম্বরে পরিবর্তন করা যাবে এবং DATEPART
যথাক্রমে।
- এটি একটি
DATETIME
মান, যার অর্থ:
- এটি দীর্ঘ সময়ের ব্যবধানে সূক্ষ্মভাবে কাজ করে। (বছরের মধ্যে কোনও সংঘর্ষ নেই।)
SELECT
বিবৃতিতে এটি অন্তর্ভুক্ত করা আপনার আউটপুটটিকে আপনার নির্দিষ্ট স্তরে ছাঁটাই সুন্দর আউটপুট সহ একটি কলাম দেবে।
'2000'
এসকিউএল তারিখের গণিত সম্পাদন করবে এমন একটি "অ্যাঙ্কর তারিখ"। জেরোনহ নীচে আবিষ্কার করেছেন যে আপনি 0
সাম্প্রতিক তারিখগুলি সেকেন্ড বা মিলিসেকেন্ড অনুসারে গোষ্ঠীভুক্ত করার সময় পূর্ববর্তী অ্যাঙ্কর ( ) এর সাথে একটি পূর্ণসংখ্যার ওভারফ্লোয়ের মুখোমুখি হন । †
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
AS [date_truncated],
COUNT(*) AS [records_in_interval],
AVG(aa.[value]) AS [average_value]
FROM [friib].[dbo].[archive_analog] AS aa
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
ORDER BY [date_truncated]
যদি আপনার ডেটা কয়েক শতাব্দী ধরে ছড়িয়ে থাকে, second দ্বিতীয়- বা মিলিসেকেন্ড গোষ্ঠীকরণের জন্য একটি একক অ্যাঙ্কর ডেট ব্যবহার করা এখনও উপচে পড়বে encounter যদি এটি হয়ে থাকে, আপনি প্রতিটি সারিটিকে তার নিজস্ব তারিখের মধ্যরাতের সাথে তুলনা করে অ্যাঙ্কর করতে বলতে পারেন:
এটি যেখানে প্রদর্শিত হবে DATEADD(DAY, DATEDIFF(DAY, 0, aa.[date]), 0)
তার পরিবর্তে ব্যবহার করুন '2000'
। আপনার ক্যোয়ারী সম্পূর্ণ অপঠনযোগ্য হবে, তবে এটি কার্যকর হবে।
বিকল্প CONVERT(DATETIME, CONVERT(DATE, aa.[date]))
হিসাবে প্রতিস্থাপন হতে পারে ।
† 2 32 ≈ 4.29E + + 9, তাই যদি আপনার DATEPART
হয় SECOND
, আপনি 4.3 বিলিয়ন সেকেন্ড উভয় পাশে পাওয়া, অথবা "নোঙ্গর ± 136 বছর।" একইভাবে, 2 32 মিলিসেকেন্ডগুলি ≈ 49.7 দিন।
Your যদি আপনার ডেটাটি শতাব্দী বা সহস্রাব্দিতে ছড়িয়ে পড়ে এবং এখনও দ্বিতীয় বা মিলিসেকেন্ডের সাথে সঠিক হয় ... অভিনন্দন! আপনি যা করছেন, তা চালিয়ে যান।
ROUND((DATEPART(MINUTE, DT.[Date]) / 5),0,1) * 5
, যাতে আমি যখন ডেটা দেখি তখন এটি নিকটতম সময়ের স্লটের সাথে সম্পর্কিত হয়