تبدو المشكلة في استعلام SQL الذي تقوم بتنفيذه لاسترداد البيانات من قاعدة البيانات. يجب أن تكون الاستعلامات صحيحة وتعود بالبيانات المناسبة للعمل المطلوب. في هذه الحالة، تحتاج إلى استخدام استعلام يناسب بنية البيانات ومتطلباتك.
قبل كل شيء، يجب عليك استخدام استعلام JOIN
لربط الجداول معًا بناءً على العلاقة بينهما، وبعد ذلك يمكنك استخدام شرط WHERE
لتحديد البيانات من تاريخ معين.
لتحقيق النتيجة المطلوبة، يجب عليك أيضًا استخدام تجميع البيانات (مثل GROUP BY
) والتلاعب بالبيانات للحصول على التنسيق المطلوب.
إليك استعلامًا يمكن استخدامه للحصول على النتيجة المطلوبة:
vbnetSELECT
t1.Country AS country,
t2.Name AS name,
t2.Value AS last,
t2.Date AS current_date,
t2_pre.Date AS previous_date,
t2_pre.Value AS previous_value
FROM
Table1 t1
JOIN
Table2 t2 ON t1.US_name1 = t2.Name
LEFT JOIN
Table2 t2_pre ON t1.US_name1 = t2_pre.Name AND t2_pre.Date = DATE_SUB(t2.Date, INTERVAL 1 DAY)
WHERE
t2.Date = '2014-05-01'
في هذا الاستعلام، يتم استخدام JOIN
لربط Table1 و Table2 بناءً على الاسم. ثم يتم استخدام LEFT JOIN
للحصول على القيمة من التاريخ السابق (previous_date) إذا كانت متوفرة.
يجب عليك استبدال أسماء الجداول والحقول بالمعلومات الفعلية في قاعدة البيانات الخاصة بك، وكذلك ضبط التاريخ المطلوب بدلاً من ‘2014-05-01’ بالتاريخ المحدد الذي ترغب في الحصول عليه.
المزيد من المعلومات
بالطبع، سأقدم لك مزيدًا من المعلومات حول الاستعلام وكيفية الحصول على النتيجة المطلوبة.
في الاستعلام السابق، تم استخدام عبارة JOIN
لربط الجدولين Table1
و Table2
معًا باستخدام الاسم كمفتاح للربط. يتم استخدام JOIN
هنا لضمان استرداد البيانات من الصفوف التي تحتوي على الأسماء المشتركة في الجدولين.
بعد ذلك، يتم استخدام LEFT JOIN
للحصول على القيمة من التاريخ السابق إذا كانت متوفرة. يتم ذلك باستخدام DATE_SUB(t2.Date, INTERVAL 1 DAY)
لاسترداد التاريخ الذي يسبق تاريخ الصف الحالي بيوم واحد. هذا يتيح لك الحصول على القيمة من التاريخ السابق إذا كان متاحًا، وإلا فإن القيمة ستكون NULL
.
تحديد التاريخ المحدد يتم باستخدام شرط WHERE
حيث يتم تحديد تاريخ معين، مثل ‘2014-05-01’، لاسترداد البيانات المرتبطة بهذا التاريخ.
النتيجة المتوقعة لهذا الاستعلام ستتضمن:
country
: البلد المتعلق بالسجل.name
: اسم السجل.last
: القيمة الأخيرة المسجلة.current_date
: التاريخ الحالي للسجل.previous_date
: التاريخ السابق للسجل، إذا كان متاحًا.previous_value
: القيمة في التاريخ السابق، إذا كانت متاحة.
تأكد من تعديل اسماء الجداول والحقول لتتوافق مع بياناتك الفعلية في قاعدة البيانات.