PDA

View Full Version : فیلتر کردن اطلاعات بر اساس تاریخ بین دو جدول



salam007
دوشنبه 08 خرداد 1391, 23:24 عصر
سلام دوستان ، امیدوارم سلامت باشید

به نظرم یکم سخته اما من میخاستم بدونم چطور میشه در SQL بین سه جدولی که هیچ ارتباطی باهم ندارند و تنها فیلد شبیه بین آنها تاریخ و ساعت هست هم فیلتر بر اساس تاریخ و ساعت و هم فیلتر بر اساس فیلدهای هر جدول برقرار نمود .

مثلا
جدول اول ----> خط تولید / میزان شمارش/سایز کالا / تاریخ / ساعت / شیفت

جدول دوم----> خط تولید / کد طرح / طرح کالا / از تاریخ / تا تاریخ

جدول سوم--> نام مسئول / تاریخ / شیفت

در جدول اول: اطلاعات بصورت هر 15 دقیقه یکبار به صورت اتوماتیک وارد دیتابیس میشه
در جدول دوم: طرح کالا چون در مدت زیاد عوض نمیشه و نمیتوان روزانه وارد کرد به صورت از تاریخ.... تا تاریخ.... ذخیره میشه
در جدول سوم: نام مسئول در پایان هر شیفت وارد میشه

میخواستم ببنیم به چه نحوی میشه این اطلاعات رو بر اساس بین دو تاریخ مشخص و زمان مشخص و همچنین به تفکیک هر کدام از فیلدهای مربوطه مثلا (خط تولید ، میزان شمارش، کد طرح ، شیفت و ...) فیلتر و آماده گزارش کنم

tiphooo
دوشنبه 08 خرداد 1391, 23:39 عصر
هر چند بهتر بود این سوال را در تالار TSQL مطرح می کردید ولی شاید کد زیر به شما کمک کند

SELECT P.*,Q.Name ,Q.Shift FROM (
SELECT *,(SELECT Code FROM Table2 WHERE FromDate =(SELECT MAX(FromDate) FROM FromDate>=Table1.Date AND EndDate<=Table1.Date)) CodeTarh FROM Table1
WHERE Date BETWEEN @Date1 AND @Date2 AND Time BETWEEN @Time1 AND @Time2)P
LEFT OUTER JOIN
(SELECT * FROM Table3)Q ON Q.Date=P.Date


Table1 جدول 1 شما می باشد و Date تاریخ وTime ساعت آن می باشد
Table2 جدول طرح می باشد (البته اگر طرح همه کالاها یکی است یک کد طرح هم در جدول اول بگذارید والا جواب نادرست است) FromDate از تاریخ و EndDate الی تاریخ می باشد
Table3 جدول سوم شما می باشد و Name نام مسئول شیفت می باشد و Shift همان شیفت می باشد
@Date1,@Date2 ,@Time1,@Time2 پارامترهای ورودی شما هستند

salam007
دوشنبه 08 خرداد 1391, 23:55 عصر
هر چند بهتر بود این سوال را در تالار TSQL مطرح می کردید ولی شاید کد زیر به شما کمک کند

SELECT P.*,Q.Name ,Q.Shift FROM (
SELECT *,(SELECT Code FROM Table2 WHERE FromDate =(SELECT MAX(FromDate) FROM FromDate>=Table1.Date AND EndDate<=Table1.Date)) CodeTarh FROM Table1
WHERE Date BETWEEN @Date1 AND @Date2 AND Time BETWEEN @Time1 AND @Time2)P
LEFT OUTER JOIN
(SELECT * FROM Table3)Q ON Q.Date=P.Date


Table1 جدول 1 شما می باشد و Date تاریخ وTime ساعت آن می باشد
Table2 جدول طرح می باشد (البته اگر طرح همه کالاها یکی است یک کد طرح هم در جدول اول بگذارید والا جواب نادرست است) FromDate از تاریخ و EndDate الی تاریخ می باشد
Table3 جدول سوم شما می باشد و Name نام مسئول شیفت می باشد و Shift همان شیفت می باشد
@Date1,@Date2 ,@Time1,@Time2 پارامترهای ورودی شما هستند


تشکر از کمکتون
طرح کالاها در هر خط تولید فرق میکند و هر چند وقت یکبار تغییر میکند مثلا شاید دو هفته یکبار ، بقیه پارامترهای ورودی ما چطور فیلتر میشن مثلا بر اساس خط تولید یا بر اساس مسئول و طرح ؟

tiphooo
سه شنبه 09 خرداد 1391, 01:37 صبح
SELECT P.*,Q.Name ,Q.Shift FROM (
SELECT *,(SELECT Code FROM Table2 WHERE FromDate =(SELECT MAX(FromDate) FROM FromDate>=Table1.Date AND EndDate<=Table1.Date AND TolidCode=Table1.Code)) CodeTarh FROM Table1
WHERE Date BETWEEN @Date1 AND @Date2 AND Time BETWEEN @Time1 AND @Time2)P
LEFT OUTER JOIN
(SELECT * FROM Table3)Q ON Q.Date=P.Date


شرط TolidCode=Table1.Code را که اضافه کنی درست می شود
در کد بالا شرط اضافه شده

salam007
سه شنبه 09 خرداد 1391, 12:03 عصر
SELECT P.*,Q.Name ,Q.Shift FROM (
SELECT *,(SELECT Code FROM Table2 WHERE FromDate =(SELECT MAX(FromDate) FROM FromDate>=Table1.Date AND EndDate<=Table1.Date AND TolidCode=Table1.Code)) CodeTarh FROM Table1
WHERE Date BETWEEN @Date1 AND @Date2 AND Time BETWEEN @Time1 AND @Time2)P
LEFT OUTER JOIN
(SELECT * FROM Table3)Q ON Q.Date=P.Date


شرط TolidCode=Table1.Code را که اضافه کنی درست می شود
در کد بالا شرط اضافه شده



دوست عزیز ممنون از راهنماییتون اما من زیاد وارد نیستم و وقتی این رو توی کوئری اجرا میکنم چیزی برام بر نمیگرودنه .
میدونم اینجوری میشه لقمه اما اگه کمکم کنید ممنون و دعاگو ،فایل بکاپ دیتابیسم رو براتون ضمیمه کردم اگه میشه در حد یک برنامه معمولی برام بگذارید .بازم ممنون

87620