एसक्यूएल का उपयोग तिथि मतभेदों के आधार पर रिकॉर्ड का चयन करने के लिए - एसक्यूएल, डेटीफ

मैं एक ऐसी प्रणाली का प्रबंधन करता हूं जो इसके स्टॉक आइटम की कीमत और मात्रा में परिवर्तन रिकॉर्ड करता है।

तालिका इस तरह दिखेगी:

STOCK(ID, DATE, QUANTITY, PRICE)

(1, 2013.01.07 00:00, 9, 6)
(1, 2013.01.02 00:00, 9, 5)
(1, 2013.01.01 00:00, 10, 5)
(2, 2013.01.07 22:00, 20, 10)
(2, 2013.01.07 00:00, 24, 10)
(3, 2013.01.02 00:00, 9, 5)
(3, 2013.01.01 00:00, 10, 5)

1 दिन की अवधि में परिवर्तन वापस करने के लिए क्वेरीकिसी आइटम के लिए नवीनतम इतिहास रिकॉर्ड और इतिहास रिकॉर्ड के लिए जानकारी को वापस लौटा देना चाहिए जो उससे 1 दिन अलग है (या यदि कोई नहीं है तो):

STOCK(ID, DATE_BEFORE, DATE_AFTER, QUANTITY_BEFORE, QUANTITY_AFTER, PRICE_BEFORE, PRICE_AFTER)
(1, 2013.01.07 00:00, 2013.01.07 00:00, 9, 9, 6, 6)
(2, 2013.01.07 00:00, 2013.01.07 22:00, 24, 20, 10, 10)
(3, 2013.01.01 00:00, 2013.01.02 00:00, 10, 9, 5, 5)

1 सप्ताह की अवधि में परिवर्तन वापस करने के लिए क्वेरीकिसी आइटम के लिए नवीनतम इतिहास रिकॉर्ड और इतिहास रिकॉर्ड के लिए जानकारी को वापस लौटा देना चाहिए जो इससे 7 दिनों में भिन्न होता है (या यदि कोई नहीं है तो):

STOCK(ID, DATE_BEFORE, DATE_AFTER, QUANTITY_BEFORE, QUANTITY_AFTER, PRICE_BEFORE, PRICE_AFTER)
(1, 2013.01.01 00:00, 2013.01.07 00:00, 10, 9, 5, 6)
(2, 2013.01.07 00:00, 2013.01.07 22:00, 24, 20, 10, 10)
(3, 2013.01.01 00:00, 2013.01.02 00:00, 10, 9, 5, 5)

मुझे उम्मीद है कि यह काफी स्पष्ट है, क्योंकि मुझे पता है कि यह एक आसान विषय नहीं है।

आपको टिप्पणियां सुनने के लिए तत्पर हैं।

अग्रिम में धन्यवाद,

एच

उत्तर:

जवाब के लिए 0 № 1

अस्वीकरण: मैं हाइपर्सोनिक एसक्यूएल बोली से परिचित नहीं हूं।

निम्नलिखित आपको प्राप्त करने में सहायता कर सकता है जहां आपको आवश्यकता है, ऐसा लगता है कि आप MySQL पर क्या चाहते हैं।

select subq.*,
st_before.quantity QUANTITY_BEFORE,
st_after.quantity QUANTITY_AFTER,
st_before.price PRICE_BEFORE,
st_after.price PRICE_AFTER
from (
select
max_id stock_id,
date_before,
date_after
from
(
SELECT id max_id,max(date) date_after
FROM STOCK
GROUP BY ID
) mx
join
(
SELECT stock.id min_id,min(stock.date) date_before
FROM STOCK
join (
SELECT id,max(date) date_after
FROM STOCK
GROUP BY ID
) mmx
on stock.id = mmx.id
and datediff(mmx.date_after, stock.date) < 1
GROUP BY stock.ID
) mn
on  mx.max_id = mn.min_id
) subq
join stock st_before
on st_before.id = subq.stock_id
and st_before.date = subq.date_before
join stock st_after
on st_after.id = subq.stock_id
and st_after.date = subq.date_after
order by stock_id
;

एसक्यूएल बेवकूफ


संबंधित सवाल
सबसे लोकप्रिय