2010-08-03 5 views
0

Каков наиболее эффективный способ получить список всех уникальных понедельников из поля даты?Функция MySQL для получения списка понедельников

Когда я не все, что беспокоит эффективность, я сделал что-то вроде:

DATE-weekday(DATE) + 1. Но теперь мне нужно вычислить это на большом наборе данных, и я не хочу, чтобы мой пользователь желал кубика Рубика, потому что он занимает так много времени. :)

Да, поле индексируется.

EDIT:
Что мне нужно, это список всех недель, которые содержат записи. Я создаю отчет о заработной плате, в котором пользователь будет выбирать неделю для фильтрации отчета.

Вот что я придумал:

SELECT DISTINCT ((DATE(`timStart`)-DAYOFWEEK(`timStart`))+2) 
FROM `time` 
ORDER BY 1 DESC 

Кто-нибудь есть какие-либо улучшения, чтобы предложить?

+1

Я не знаю ответ брата, но его «Куб Рубика» – Moon

+0

@Moon: Исправлено – Icode4food

+0

Я думаю, что ваш вопрос недостаточно ясен. – mvds

ответ

3

«уникальные понедельники от поля даты» должно быть простым, как:

SELECT DISTINCT(`date`) FROM `table` WHERE WEEKDAY(`date`)=0 

«недели, в которой у нас есть значения даты» должно быть простым, как:

SELECT DISTINCT(WEEK(`date`)) FROM `table` WHERE YEAR(`date`)=2010; 

SELECT WEEK(now()),YEAR(now()); 

+-------------+-------------+ 
| WEEK(now()) | YEAR(now()) | 
+-------------+-------------+ 
|   31 |  2010 | 
+-------------+-------------+ 

, который принесет пользу вы также найдете в своих других запросах на заработную плату, используя

WHERE WEEK(`date`)=31 

Положите ваше доверие в mysql для обработки вещей из там.

+0

Причина, по которой это не будет работать, заключается в том, что возможно, что в течение данной недели могут быть записи, но ни один из них в понедельник. – Icode4food

+0

, тогда просто запросите недели, а не понедельники. в вашей программе, найдите понедельник, принадлежащего неделе. не делайте вещи слишком сложными. – mvds

+0

Это то, что я искал, функция WEEK. Извините, я не уточнил свой вопрос. – Icode4food

Смежные вопросы