মাইএসকিউএল কোয়েরি গত সপ্তাহ থেকে ডেটা নির্বাচন করবেন?


98

হাই আমার কাছে একটি তারিখের ক্ষেত্র এবং অন্য কিছু তথ্য সহ একটি টেবিল রয়েছে। আমি গত সপ্তাহ থেকে সমস্ত এন্ট্রি নির্বাচন করতে চাই, (রবিবার থেকে সপ্তাহের শুরু)।

টেবিল মান:

id  date
2   2011-05-14 09:17:25
5   2011-05-16 09:17:25
6   2011-05-17 09:17:25
8   2011-05-20 09:17:25
15  2011-05-22 09:17:25

আমি গত সপ্তাহ থেকে সমস্ত আইডি নির্বাচন করতে চাই, প্রত্যাশিত আউটপুট 5, 6, 8 হবে (আইডি 2 গত সপ্তাহে নয়, এবং আইডি 15 বর্তমান সপ্তাহে রয়েছে))

কীভাবে লিখবেন এবং এসকিউএল ক্যোয়ারীও তার জন্য।


সুতরাং কেবল পরিষ্কার করতে, আপনি কি রবিবার থেকে ডেটা চান, অগত্যা 7 দিনের ডেটা নয়? তাই যদি আজ সোমবার হয় আপনি 2 দিনের ডেটা পাবেন (রবিবার এবং সোমবার)?
ব্রেন্ডন লং

রবিবার থেকে শনিবার। শেষ 7 দিন নয়
কোডেরেক্স

আমার এখনই এটি এসকিউএলে রূপান্তরিত করার মতো মনে হয় না তবে আপনি উইকিপিডিয়ায় সপ্তাহের দিন নির্ধারণ করতে একটি অ্যালগরিদম খুঁজে পেতে পারেন এবং তারপরে কতটা পিছনে ফিরে যেতে হবে তা স্থির করতে এটি ব্যবহার করুন: en.wikedia.org/wiki/ …
ব্রেন্ডন লং

@Brendan লং সে ব্যবহার করতে পারে SELECT id FROM tbl WHERE WEEK(date, 0) = WEEK(NOW(), 0) - 1সপ্তাহের জন্য, কিন্তু আমি অনুমান তার লক্ষ্য নয় বাস্তব ক্যালেন্ডার সপ্তাহ। কমপক্ষে তিনি আইএসও -8601 এর মতো এস / টি উল্লেখ করেননি, বা বছরের পরিবর্তনের বিষয়টি বিবেচনায় নেওয়া উচিত কিনা।
জর্জেন থেলেন

আমার জন্য উত্তরটি হ'লWHERE table.column >= DATE(NOW()) - INTERVAL 7 DAY
কনার জোঁক

উত্তর:


126
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

4
হাই, সপ্তাহের সংজ্ঞা দিয়ে সোমবার থেকে রবিবার পর্যন্ত
কীভাবে যাবেন

4
@ গ্রাফ হ্যাঁ, উপরের এসকিউএল স্ক্রিপ্টটি এর মতো হবে: যেখান থেকে তারিখ> তারিখ (তারিখ (এখন ()), ইন্টারভাল ডায়াফউইক (এখন ()) + D দিন) এবং তারিখ <= তারিখ (এখনই (এখন) )), আন্তঃকালীন দিবসউইক (এখন ()) - 1 দিন)
এক্সমান ক্লাসিকাল

7
এটি গত সপ্তাহের পরিবর্তে শেষ সাত দিন ফিরে আসে
কাজুয়ার


22
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

পূর্ববর্তী পুরো ক্যালেন্ডার সপ্তাহে ফিরে যাওয়ার জন্য আমি বিশেষভাবে YEARWEEK ফাংশনটি ব্যবহার করি (আজকের 7 দিনের বিপরীতে)। YEARWEEK এছাড়াও দ্বিতীয় যুক্তির অনুমতি দেয় যা সপ্তাহের শুরু সেট করে বা বছরের প্রথম / শেষ সপ্তাহটি কীভাবে পরিচালনা করা হয় তা নির্ধারণ করে। YEARWEEK আপনাকে একক ভেরিয়েবলের পিছনে / এগিয়ে যেতে সপ্তাহের সংখ্যা রাখতে দেয় এবং পূর্ববর্তী / ভবিষ্যতের বছরগুলি থেকে একই সপ্তাহের সংখ্যাটি অন্তর্ভুক্ত করবে না এবং এটি অন্যান্য উত্তরগুলির তুলনায় এটি আরও সংক্ষিপ্ত।


4
যতই আমি বলতে পারি, এটিই কেবলমাত্র উত্তর যা আসলে ওপিএস প্রশ্নের সঠিক উত্তর দেয়। আগের সপ্তাহ থেকে রেকর্ড পেতে কীভাবে প্রশ্ন ছিল । এখানে অনেক উত্তর আসলে ভুল।
স্কোয়ারওয়েভ

আপনি যদি সপ্তাহের শুরুর দিনটিও নির্দিষ্ট করতে চান তবে YEARWEEK () তে ২ য় যুক্তি সরবরাহ করুন: WHERE YEARWEEK(dateColumnFromTbl, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
স্ট্যামস্টার

আমি যদি আজকের তারিখটিও অন্তর্ভুক্ত করতে চাই ... সেই গত সপ্তাহের মধ্যে ... কেমন ছিল?
gumuruh

13

সরলীকৃত ফর্ম:

গত সপ্তাহের ডেটা:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );

2 সপ্তাহ আগে ডেটা:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );

এসকিউএল ফিডল

http://sqlfiddle.com/#!8/6fa6e/2


বছরের প্রথম সপ্তাহে কী ঘটে?
ক্রিশ্চান গয়েটজে

4
প্রশ্নটি ছিল গত সপ্তাহ থেকে ডেটা নির্বাচন করতে? যদি বছরের প্রথম সপ্তাহ, এবং আপনি গত সপ্তাহের ডেটা নির্বাচন করতে চান তবে ক্যোয়ারীটি আগের বছরের শেষ সপ্তাহে ফিরে আসবে।
আনাম

4
আমি তখন কেবল YEAR (তারিখ) = YEAR (বর্তমান_ তারিখ) দ্বারা বিভ্রান্ত হয়েছি। কিভাবে এটি আগের বছর নির্বাচন করতে পারেন?
খ্রিস্টান গয়েটজি

8

আপনি পিএইচপি তে আপনার গণনা তৈরি করতে পারেন এবং তারপরে এটি আপনার ক্যোয়ারিতে যুক্ত করতে পারেন:

$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago

$sql = "SELECT * FROM table WHERE date <='$date' ";

এখন এটি এক সপ্তাহ আগে তারিখ দেবে


5

সম্ভবত সবচেয়ে সহজ উপায় হ'ল:

SELECT id
FROM table
WHERE date >= current_date - 7

8 দিনের জন্য (সোমবার - সোমবার)


4

দয়া করে লোকেরা ... 'গত সপ্তাহে' ওপি যেমন জিজ্ঞাসা করেছিল এবং আমি কোথায় খুঁজছিলাম (তবে উত্তর সন্তুষ্টির কোনওটিই খুঁজে পাইনি) হ'ল সর্বশেষ সপ্তাহ।

তাহলে আজ মঙ্গলবার, তারপর গত সপ্তাহ সোমবার এক সপ্তাহ আগে রবিবার যাও এক সপ্তাহ আগে

সুতরাং:

WHERE
    WEEK(yourdate) = WEEK(NOW()) - 1

বা আইএসও সপ্তাহের জন্য:

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1

2

আজকের তুলনায় আপনার কোন দিনটি রবিবার আপনার মিডওয়্যারের (পিএইচপি, পাইথন ইত্যাদি) * র মধ্যে পড়তে হবে

তারপরে,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • মাইএসকিউএল-তে আজকের তুলনায় রবিবারের তারিখটি পাওয়ার উপায় হতে পারে; এটি পরিশ্রম করার জন্য খুব ব্যয়বহুল না হলে এটি বিতর্কিতভাবে ক্লিনার সমাধান হবে



1

উপরের ক্যোয়ারীটি কাজ করবে না। whereধারাটির পরে , যদি আমরা CASTকলাম মানটি না করতে পারি তবে এটি কার্যকর হবে না। তোমার উচিতcastআপনার কলামটির মান ।

যেমন:

SELECT.....
WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )

1

আরও উদাহরণের জন্য গত মাসে, গত বছর, গত 15 দিন, শেষ 3 মাস

শেষ সপ্তাহের রেকর্ড আনুন

মাইএসকিএল ডাটাবেস টেবিল থেকে গত সপ্তাহের রেকর্ড আনার জন্য নীচের মাইএসকিউএল কোয়েরিটি ব্যবহার করে।

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)

1

মাইএসকিউএলে গত সপ্তাহ, মাস এবং বছরের রেকর্ড পাওয়ার একটি উপায় এখানে way

গত সপ্তাহে

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1;

গত মাসে

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE MONTH(InsertTime) = MONTH(NOW()) - 1;

গত বছর

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;

1

আপনি যদি গত 7 দিনের মধ্যে রেকর্ডগুলি পুনরুদ্ধার করতে চান তবে আপনি নীচের স্নিপেটটি ব্যবহার করতে পারেন:

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;

0
SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 

4
আপনার কোডটি কেন জিজ্ঞাসকের প্রশ্নের উত্তর দেয় তা দয়া করে ব্যাখ্যা করুন।
জোশ বার্গেস

0

আমি প্রায়শই একটি দ্রুত "গত সপ্তাহে" চেকও করি এবং নিম্নলিখিতগুলি আমার পক্ষে ভাল কাজ করে এবং আজকে অন্তর্ভুক্ত করে।

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 

SET @StartDate = Getdate() - 7 /* Seven Days Earlier */
SET @EndDate = Getdate() /* Now */

SELECT id 
FROM   mytable 
WHERE  date BETWEEN @StartDate AND @Enddate 

আপনি যদি আজ এটি অন্তর্ভুক্ত না করতে চান তবে কেবলমাত্র @ শেষ তারিখ থেকে একটি অতিরিক্ত দিন বিয়োগ করুন। আমি এই দুটি ভেরিয়েবল নির্বাচন করা হলে আজ পেতে

@ স্টার্টডেট 2015-11-16 16: 34: 05.347 / * সর্বশেষ সোমবার * /

@ শেষ তারিখ 2015-11-23 16: 34: 05.347 / * এই সোমবার * /

আমি যদি রবিবার থেকে রবিবার চান তবে আমার নিম্নলিখিতগুলি থাকবে।

SET @StartDate = Getdate() - 8 /* Eight Days Earlier */
SET @EndDate = Getdate() - 1  /* Yesterday */

@ স্টার্টডেট 2015-11-15 16: 34: 05.347 / * পূর্ববর্তী রবিবার * /

@ শেষ তারিখ 2015-11-22 16: 34: 05.347 / * সর্বশেষ রবিবার * /



0

আপনি এটিকেও ব্যবহার করতে পারেন

SELECT *
FROM   inventory
WHERE  YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)

0

আমি রবিবার থেকে শুরু সপ্তাহের জন্য এটি ব্যবহার করুন:

SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY  
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY

-1

এটা চেষ্টা কর:

Declare @Daytype varchar(15),
        @StartDate datetime,
        @EndDate datetime
set @Daytype = datename(dw, getdate())

if @Daytype= 'Monday' 
    begin
        set @StartDate = getdate()-7 
        set @EndDate = getdate()-1

    end


else if @Daytype = 'Tuesday'

    begin
        set @StartDate = getdate()-8 
        set @EndDate = getdate()-2

    end
Else if @Daytype = 'Wednesday'
    begin
        set @StartDate = getdate()-9
        set @EndDate = getdate()-3
    end
Else if @Daytype = 'Thursday'
    begin
        set @StartDate = getdate()-10 
        set @EndDate = getdate()-4
    end

Else if @Daytype = 'Friday'

    begin
        set @StartDate = getdate()-11
        set @EndDate = getdate()-5

    end

Else if @Daytype = 'Saturday'

    begin
        set @StartDate = getdate()-12
        set @EndDate = getdate()-6

    end

Else if @Daytype = 'Sunday'

    begin
        set @StartDate = getdate()-13
        set @EndDate = getdate()-7

    end

 select @StartDate,@EndDate

-5

আপনি যদি ইতিমধ্যে তারিখগুলি জানেন তবে আপনি কেবল এর মধ্যে ব্যবহার করতে পারেন:

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.