గత 30 రోజుల్లో జరిగిన ఈవెంట్‌ల కోసం వెతుకుతున్నాను

మరొక సాధారణ పని నిర్దిష్ట తేదీ పరిధికి చెందిన అడ్డు వరుసల కోసం శోధించడం. సూత్రప్రాయంగా, శ్రేణి యొక్క ప్రారంభ మరియు ముగింపు తేదీలు నిర్ణయించబడినట్లయితే ఇది కష్టం కాదు: SQL తేదీలను అలాగే సంఖ్యలను పోల్చవచ్చు.

పోలిక ఆపరేటర్‌లను తేదీలకు వర్తింపజేయవచ్చు: < , > , <= , మొదలైనవి. అదనంగా, తేదీలతో కూడా పని చేయగల ప్రత్యేక BETWEEN ఆపరేటర్ ఉంది. ఉదాహరణకు, 2022 వేసవిలో చేయాల్సిన టాస్క్ టేబుల్ నుండి అన్ని టాస్క్‌లను ఎంచుకునే ప్రశ్నను వ్రాద్దాం. అభ్యర్థన ఇలా కనిపిస్తుంది:

SELECT * FROM task  
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'

ఈ ప్రశ్న యొక్క ఫలితం ఇలా ఉంటుంది:

id ఉద్యోగి_ఐడి పేరు గడువు
1 1 ఫ్రంటెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-01
2 2 బ్యాకెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-15
3 5 కాఫీ కొనండి 2022-07-01
4 5 కాఫీ కొనండి 2022-08-01

అయితే గత 30 రోజులుగా మేము టాస్క్‌లను పొందాలనుకుంటే అభ్యర్థనలో ఏమి వ్రాయాలి. గత 30 రోజులు నేరుగా ప్రశ్న అమలు సమయంతో ముడిపడి ఉన్నాయి. అంటే, ప్రశ్న జూలై 25న అమలు చేయబడితే, మీరు జూన్ 25 నుండి జూలై 24 వరకు తేదీలను ఎంచుకోవాలి. తేదీ పరిధిని ప్రస్తుత సమయానికి ఎలా బంధించాలి?

దీన్ని చేయడానికి, తేదీ జోడింపు ఫంక్షన్‌ను ఉపయోగించండి:

DATE_ADD (date, INTERVAL expression units)

కొన్ని ఉదాహరణలతో వివరించడం సులభం అని నేను భావిస్తున్నాను:

# అభ్యర్థన ఫలితం
1 DATE_ADD('2022-06-04', విరామం 5 రోజులు) 2022-06-09
2 DATE_ADD('2022-06-04', విరామం 4 వారాలు) 2022-07-02
3 DATE_ADD('2022-06-04', విరామం 2 నెలలు) 2022-08-04
4
5 DATE_SUB('2022-06-04', విరామం 5 రోజులు) 2022-05-30
6 DATE_SUB('2022-06-04', విరామం 4 వారాలు) 2022-05-07
7 DATE_SUB('2022-06-04', విరామం 2 నెలలు) 2022-04-04

మార్గం ద్వారా, నిర్దిష్ట సంఖ్యలో రోజులు, వారాలు, నెలలు మరియు సంవత్సరాలను కూడా నిర్దిష్ట తేదీ నుండి తీసివేయవచ్చు.

మరియు మేము మా అభ్యర్థనకు తిరిగి వస్తే - గత 30 రోజుల డేటాను పొందడానికి, ఈ పరిధిలో మాకు రెండు తేదీలు అవసరం:

  • CURDATE() - పరిధి ముగింపు
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) - పరిధి ప్రారంభం

అభ్యర్థన ఇలా కనిపిస్తుంది:

SELECT * FROM task WHERE task.deadline  
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE() 

ఈ ప్రశ్న ఫలితం ఇలా ఉంటుంది (నాకు ఈ రోజు జూన్ 4, 2022):

id ఉద్యోగి_ఐడి పేరు గడువు
1 1 ఫ్రంటెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-01

రెండు తేదీల మధ్య వ్యత్యాసాన్ని ఎలా కనుగొనాలి

మరియు మరొక ఉపయోగకరమైన ఫీచర్. కొన్నిసార్లు మీరు రెండు తేదీల మధ్య వ్యత్యాసాన్ని రోజులలో లెక్కించాల్సి రావచ్చు. దీన్ని చేయడానికి, SQLకి ప్రత్యేక ఫంక్షన్ ఉంది - DATEDIFF ().

ఆమెతో పని చేయడం చాలా సులభం:

DATEDIFF (date 1, date 2)

రెండవ తేదీ కేవలం మొదటి తేదీ నుండి తీసివేయబడుతుంది. తేదీ1 తర్వాత తేదీ2 వచ్చినట్లయితే, ఫలితం ప్రతికూలంగా ఉంటుంది.

మార్గం ద్వారా, మేము DATEDIFF() ఫంక్షన్‌ని ఉపయోగించి మా మునుపటి ప్రశ్నను తిరిగి వ్రాయవచ్చు. మేము టాస్క్ టేబుల్ నుండి అన్ని టాస్క్‌లను ఎంచుకోవాలి, దీని గడువు ప్రస్తుత తేదీ నుండి 30 రోజుల కంటే ఎక్కువ తేడా ఉండదు. ఆ అభ్యర్థన ఎలా ఉంటుందో ఇక్కడ ఉంది:

SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30

ఈ ప్రశ్న ఫలితం ఇలా ఉంటుంది (నాకు ఈ రోజు జూన్ 4, 2022):

id ఉద్యోగి_ఐడి పేరు గడువు
1 1 ఫ్రంటెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-01
2 2 బ్యాకెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-15
3 5 కాఫీ కొనండి 2022-07-01

ఈసారి, SQL మూడు వరుసలను కనుగొంది. చివరిసారి ఒక లైన్ ఎందుకు ఉంది, ఈసారి మూడు ఎందుకు ఉన్నాయి అని ఆలోచించండి?