ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 13 · 4లో పాఠం 4కోర్సులో 52/57~12 min
మాడ్యూల్ పాఠాలు (4/4)

మార్పులు: LAG మరియు LEAD

మార్పులు: LAG మరియు LEAD

సీక్వెన్షియల్ మరియు టైమ్-బేస్డ్ డేటాలో, మీరు తరచుగా ప్రస్తుత అడ్డు వరుసను మునుపటి రోజుతో పోల్చాలి. "ప్రామాణిక" SQLలో, అలా చేయడం వలన చాలా ప్రమాదకరమైన (మరియు చాలా నెమ్మదిగా) స్వీయ-జాయిన్స్ అవసరం.

LAG() (మునుపటి వరుస) మరియు LEAD() (తదుపరి వరుస) ఫంక్షన్‌లు ఈ సమస్యను అత్యంత చురుకుదనం మరియు చక్కదనంతో సరిగ్గా పరిష్కరిస్తాయి.

గతం మరియు భవిష్యత్తు కోసం చూస్తున్నాను

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

ఉదాహరణలో, ప్రతి అడ్డు వరుస ఒకే పట్టిక ద్వారా ఉత్పత్తి చేయబడిన మొత్తాన్ని సౌకర్యవంతంగా తీసుకువెళుతుంది, ఒక అడ్డు వరుస ద్వారా ముందుకు మార్చబడుతుంది (సమయంలో వెనుకకు). వ్యత్యాసాన్ని లేదా నెలవారీ శాతం మార్పులను గణించడానికి మేము total_amount - LAG(...)ని సులభంగా తీసివేయవచ్చు!

అదేవిధంగా, LEAD() విలువను ప్రస్తుత దాని దిగువన ఉన్న అడ్డు వరుస నుండి లాగుతుంది.

వ్యాయామం#sql.m13.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

'ఉత్పత్తుల' పట్టిక నుండి, 'id', 'launched_on', 'price'ని సంగ్రహించి, 'prev_price'ని జోడించండి, అనగా లాజికల్‌గా 'ప్రారంభించిన_ఆన్' ఆర్డర్‌లో లాజికల్‌గా పరిగణించబడే ఉత్పత్తి యొక్క 'ధర' 'మునుపటిది'గా పరిగణించబడుతుంది.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

LAG(ధర) ఓవర్‌ని ఉపయోగించండి(ASCలో ప్రారంభించిన_ఆర్డర్ ద్వారా ఆర్డర్)

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#sql.m13.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఒక్కో వినియోగదారుకు రేటింగ్ జంప్‌లను మీరు ఎలా గణిస్తారు? దీన్ని అనుకరించండి: 'సమీక్షలు' పట్టిక నుండి 'customer_id', 'created_at', 'rating' మరియు 'next_rating' (కాలక్రమేణా అదే కస్టమర్ యొక్క తదుపరి సమీక్ష). కాబట్టి 'customer_id' ద్వారా విభజన చేయండి, 'created_at' ద్వారా ఆర్డర్ చేయండి మరియు ముందుకు చూడడానికి కుడి విండో ఫంక్షన్‌ని ఉపయోగించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

లీడ్()తో పాటు పార్టిషన్ ద్వారా మరియు ఓవర్‌లో ఆర్డర్ చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది