web-dev-qa-db-ja.com

先週のデータを選択するMySQLクエリ?

こんにちは、日付フィールドとその他の情報を含むテーブルがあります。先週(日曜日から週が始まる)のすべてのエントリを選択します。

テーブル値:

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

先週からすべてのIDを選択します。期待される出力は5、6、8です。(ID 2は先週ではなく、ID 15は今週です。)

記述方法とそのためのSQLクエリ。

89
coderex
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
114
piotrm
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
123
mr_eclair
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

YEARWEEK関数を使用して、前の暦週全体に戻ります(今日の7日前ではありません)。 YEARWEEKは、週の開始を設定するか、年の最初/最後の週の処理方法を決定する2番目の引数も許可します。 YEARWEEKを使用すると、1つの変数に戻る/進むための週数を保持できます。また、過去/未来の年の同じ週数は含まれず、ここにある他のほとんどの回答よりもはるかに短くなります。

18
timecrust

簡略化された形式:

先週のデータ:

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 );

SQL Fiddle

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

12
Anam

Phpで計算を行い、それをクエリに追加できます。

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

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

今、これは一週間前の日付を与えます

7
Ibu

おそらく最も簡単な方法は次のとおりです。

SELECT id
FROM table
WHERE date >= current_date - 7

8日間(月曜日-月曜日)

3
useless

これは簡単な方法です。これは私のコードの実際の例であり、完全に機能します。

where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")

ミドルウェア(php、pythonなど)で、今日を基準として日が日曜日である日を計算する必要があります*

次に、

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • mySQLで今日と比較して日曜日の日付を取得する方法もあります。実行するのに費用がかかりすぎないなら、それは間違いなくよりクリーンなソリューションでしょう
2
virtualeyes

1行にすることができます。

SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
2

人々にお願いします... OPが尋ねた「先週」と私が探していた(しかし満足のいく答えが見つからなかった)最後の週です。

今日が火曜日の場合、LAST WEEKは月曜日ですA WEEK AGO to Sunday A WEEK AGO.

そう:

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

またはISO週の場合:

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
2
MS Berends

上記のクエリは機能しません。 where句の後、列の値をCASTできない場合、機能しません。列の値をcastする必要があります。

例えば。:

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

また、簡単に使用できます

SELECT *
FROM   inventory
WHERE  YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)
0
HAROONMIND
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
0
Veera Induvasi

i日曜日からの週の開始にこれを使用します。

SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY  
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY
0
Hoàng Vũ Tgtt

私はしばしば「先週」の素早いチェックも行いますが、以下は私にとってはうまくいく傾向があり、今日も含まれています。

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 

これに今日を含めないようにするには、@ EndDateから余分な日を引いてください。今日これらの2つの変数を選択すると、

@StartDate 2015-11-16 16:34:05.347/*先週の月曜日* /

@EndDate 2015-11-23 16:34:05.347/*今週の月曜日* /

日曜日から日曜日にしたい場合は、次のようにします。

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

@StartDate 2015-11-15 16:34:05.347/*前の日曜日* /

@EndDate 2015-11-22 16:34:05.347/*先週の日曜日* /

0
Izulien

たとえば、先月、昨年、過去15日間、過去3か月など

最後の1週間のレコードを取得する

次のMySQLクエリを使用して、mysqlデータベーステーブルから先週のレコードを取得します。

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)
0
Developer
SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 
0
Manoj