پیگیری عملیات تولید نتیجه پیشرفت با تهی های مشروط: SQL در مقابل SPL

یک جدول پایگاه داده SQL Server ، پیشرفت اجرای چندین عملیات در یک فرآیند تولید را توصیف می کند. هنگامی که نتیجه OP 0 باشد ، نشانگر شکست اجرای است و باید تا نتیجه 1 ادامه یابد. این نشانگر اجرای موفقیت آمیز است و OP بعدی باید به ترتیب اجرا شود.
اکنون باید پیشرفت اجرای عملیات را پیگیری کنیم: هر عملیات یک زمینه را اشغال می کند ، و ترتیب میدانی نشان دهنده پیشرفت اجرای عملیات است. هنگامی که یک عملیات نتواند اجرا کند ، باید وارد مرحله ردیابی بعدی شود ، یعنی تولید یک رکورد جدید. پیشرفت 1 (در صورت وجود) از عملیات موفق قبلی را قبل از ادامه این عملیات کپی کنید. اگر این بار این عمل موفقیت آمیز باشد ، عملیات بعدی در مرحله ردیابی فعلی ادامه خواهد یافت.
SQL
SELECT CASE WHEN max(OP) > 1 THEN 1 ELSE MAX(CASE WHEN OP = 1 THEN Outcome END) END AS OP1
, CASE WHEN max(OP) > 2 THEN 1 ELSE MAX(CASE WHEN OP = 2 THEN Outcome END) END AS OP2
, CASE WHEN max(OP) > 3 THEN 1 ELSE MAX(CASE WHEN OP = 3 THEN Outcome END) END AS OP3
, CASE WHEN max(OP) > 4 THEN 1 ELSE MAX(CASE WHEN OP = 4 THEN Outcome END) END AS OP4
, CASE WHEN max(OP) > 5 THEN 1 ELSE MAX(CASE WHEN OP = 5 THEN Outcome END) END AS OP5
FROM (
SELECT *
, sum(flag) OVER(ORDER BY OP, Outcome rows BETWEEN unbounded preceding AND CURRENT row) AS counter
FROM (
SELECT *
, CASE WHEN (lag(outcome) OVER(ORDER BY op,outcome) = outcome AND outcome = 1) OR (lag(outcome) OVER(ORDER BY op,outcome) <> outcome AND outcome = 0)
THEN 0
ELSE 1
END AS flag
FROM Operations
) x
) x
GROUP BY x.counter
SQL مکانیسمی برای گروه بندی منظم بر اساس شرایط ندارد و در عوض سوابق اصلی را به مراحل مختلف ردیابی تقسیم می کند ، و نیاز به استفاده از زیرمجموعه های تو در تو و توابع چند پنجره برای علامت گذاری دارد. SQL معمولی همچنین فاقد نحو برای زمینه های تولید پویا است و فقط می تواند به سختی یک مورد را برای هر زمینه بنویسد. زمینه های تولید پویا به استفاده از SQL پویا نیاز دارند.
کد SPL ساده و آسان برای درک است. try.demo
داده های بار A1.
A2 : به صورت پویا یک جدول دو بعدی تولید می کند.
A3 : گروه بندی بر اساس شرایط ، هنگامی که آخرین نتیجه اعدام شکست خورد ، گروه جدیدی تشکیل شد ، کجا [-1] نماینده قبلی را نشان می دهد. توجه داشته باشید که در اینجا هیچ تجمع فوری وجود ندارد.
A4 : داده های هر گروه را حلقه کرده و یک رکورد را به طور همزمان با توجه به قوانین اضافه کنید. در ابتدا حدود 1s را پر کنید و دنباله نتیجه این گروه در پایان.
SPL بدون منبع باز و آدرس منبع باز است
بارگیری رایگان