برنامه نویسی

گروه بندی و تجمع را در گروه ها سفارش دهید – از SQL تا SPL شماره 1

توضیحات و تجزیه و تحلیل مشکل:

یک جدول خاص پایگاه داده ، چرخه پرداخت برای چندین پروژه (IDS) را توصیف می کند ، با یک چرخه پرداخت متشکل از ماه های منظم و یک ماه بسته شدن. ماه معمولی فقط مبلغ ماه جاری را دارد اما فاکتور ، صورتحساب = 0 ؛ ماه پایانی هم مبلغ ماه جاری و هم فاکتور ، فاکتور = 1 را شامل می شود.

جدول منبع

وظیفه: اکنون باید هر ماه پرداخت را برای هر پروژه شناسایی کنیم و مبلغ کل آن چرخه پرداخت را محاسبه کنیم. توجه داشته باشید که معیارهای گروه بندی و ترتیب چرخه پرداخت مرتبط است ، یعنی “وقتی ماه گذشته صورتحساب = 1 ، گروه جدیدی را شروع کنید” ، که با گروه بندی هم ارزی مشترک متفاوت است.

نتایج مورد انتظار

مقایسه کد:

SQL

WITH cte AS (
      SELECT *, sum(invoiced) OVER (PARTITION BY ID ORDER BY Date desc) grp
      FROM mytable
      ORDER BY ID, Date
)
SELECT ID, MAX(date) AS Date, MAX(Invoiced) AS Invoiced, SUM(Amount) AS Amount
FROM cte
GROUP BY ID, grp
ORDER BY ID, Date
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

SQL دارای گروه بندی مستقیم با سفارش نیست ، باید با استفاده از توابع پنجره و زیرمجموعه ها ، یک ستون راهنما اضافه کند و سپس بر اساس ستون راهنما گروه و جمع شود. SQL فوق از روش سفارش معکوس و سپس تجمع برای جمع آوری ستون راهنما استفاده می کند که درک آن دشوار است.

چلپ چلوپ:

SPL از محاسبات مرتب شده مناسب پشتیبانی می کند ، و کد ساده است.

try.demo

رمز

داده های بار ، توجه داشته باشید که داده ها مرتب شده اند.

A2 : وقتی شناسه بدون تغییر باقی می ماند و ماه قبل یک ماه معمولی است ، مبلغ را به ارزش تجمعی تغییر دهید. در غیر این صورت (در ماه اول هر چرخه پرداخت) ، مبلغ را به مبلغ ماه جاری تنظیم کنید. [-1] رکورد قبلی را نشان می دهد.


Esproc SPR منبع باز است و اکنون در اینجا موجود است: آدرس منبع باز.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا