كيف اضع قيمتين من نفس column عبر دالة datediff في mysql

AbuOmarHussein

السلام عليكم ورحمة الله

عنديTable

Columns:OrderID int PK

Department varchar(100)

OrderDate date

OrderQty int

OrderTotal int

اريد ان اجمع OrderDate من نفس الcolumn لكن للاسف لم استطع و سويت self join ايضا لم ينفع الامر يرجع لي القيمة " row(s) returnd 0"

select p.orderdate,datediff(p.orderdate,m.orderdate) as d
from orders as p inner join
orders as m on p.OrderID = m.OrderID where p.OrderID =1 and
m.OrderID =5
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

دالة datediff() تستقبل تاريخين كإدخالات وتحسب الفرق بينهما، وأنت تحاول حساب الفرق بين تاريخين متطابقين. لذلك، سترجع الدالة دائمًا 0.

وبالتالي تحتاج إلى استخدام وظيفة أخرى لإنشاء تاريخين مختلفين، كاستخدام وظيفة NOW() لإنشاء تاريخ اليوم، أو استخدام وظيفة DATEADD() لإنشاء تاريخ في الماضي أو المستقبل.

SELECT
  p.orderdate,
  datediff(p.orderdate, NOW()) AS d
FROM orders AS p
WHERE p.orderid = 1;

بإمكانك أيضًا استخدام وظيفة DATEADD() لإنشاء تاريخ في الماضي، أي في حال جمع قيمتين من نفس العمود بفاصل زمني قدره يوم واحد سيكون الاستعلام كالتالي:

SELECT
  p.orderdate,
  datediff(p.orderdate, DATEADD(DAY, -1, NOW())) AS d
FROM orders AS p
WHERE p.orderid = 1;

لا التاريخ الأول 2022-05-05

والثاني 2022-06-10

هل جربت الاستعلام التالي:

SELECT p.OrderID, p.OrderDate, m.OrderID AS OrderID2, m.OrderDate AS OrderDate2, DATEDIFF(p.OrderDate, m.OrderDate) AS DateDiff
FROM orders AS p
INNER JOIN orders AS m ON p.OrderID <> m.OrderID
WHERE p.OrderID = 1;

حيث نستخدم INNER JOIN للانضمام إلى الجدول orders نفسه باستخدام الجدولين المؤقتين p و m، ثم p.OrderID <> m.OrderID لضمان أننا نقوم بإجراء الانضمام بين أوامر مختلفة (بنفس الصف) فقط، ونستخدم DATEDIFF لحساب الفارق بين تواريخ الأوامر.

والاستعلام سيعرض OrderID و OrderDate من الأمر الأصلي و OrderID2 و OrderDate2 من الأمر المقابل، بالإضافة إلى الفارق بين تواريخ الأوامر باستخدام DATEDIFF كمجال إضافي يُسمى DateDiff.