Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Привет, друзья!
Нужна ваша помощь!
Поставлена след. задача!
Нужно вывести список товаров из Table1, которые поступили в нечетные недели 2003 года!
Все сделал, только не смог понять, как включить в условие "Нечетные недели"!
Был бы признателен за любую помощь!
Спасибо!
28 ноя 14, 15:56    [16920375]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
adimmat,

сначала определитесь, как будете нумеровать недели.
Когда неделя, например, начинается?
Какая неделя имеет номер 1?
28 ноя 14, 15:58    [16920399]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Четное число - это число, которое делится на 2 без остатка.
Нечетное число - это число, которое делится на 2 с остатком.
28 ноя 14, 15:58    [16920403]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Glory, спасибо за подсказку, но это я знаю! Мне само понятие не совсем понятно! Что значит четная неделя, какое число или месяц считается началом, т.е первой неделю?
28 ноя 14, 21:34    [16922102]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
Glory
Member

Откуда:
Сообщений: 104760
adimmat
Мне само понятие не совсем понятно!

Непонятно, что все недели в году нумеруются с 1 ?

adimmat
Что значит четная неделя, какое число или месяц считается началом, т.е первой неделю?

А вот это вопрос к вам
28 ноя 14, 21:49    [16922162]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Glory, Думаю, логически предположить, что с 01.01.2003 года и до 01.01.2004!
28 ноя 14, 21:55    [16922193]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
Glory
Member

Откуда:
Сообщений: 104760
adimmat
Думаю, логически предположить, что с 01.01.2003 года и до 01.01.2004!

Ну так определитесь уже, как вы нумеруете недели
http://planetcalc.ru/1252/
http://www.comtech-print.ru/etc/numeration_weeks.html
28 ноя 14, 22:04    [16922226]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Glory,Вот, думаю, если для этого разберусь, остальные сам смогу понять и сделать!
1. С первого дня года
Такая система начинает отсчет недель года с 1-го января независимо от того, каким днем недели этот день является.
28 ноя 14, 22:21    [16922308]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
Glory
Member

Откуда:
Сообщений: 104760
adimmat
Вот, думаю, если для этого разберусь, остальные сам смогу понять и сделать!
1. С первого дня года
Такая система начинает отсчет недель года с 1-го января независимо от того, каким днем недели этот день является.

а что с ним разбираться ?
http://msdn.microsoft.com/en-us/library/ms174420.aspx
28 ноя 14, 22:23    [16922328]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Ребята, спасибо большое за все советы и замечания! Я прочел весь материал, который был указан вами!
Но к моему большому сожалению и стыду я не смог написать простой запрос! Видимо, не понял или неправильно понял все!
Я был бы вам признателен, если бы вы объяснили мне, как мне работать с конструкцией DATEPART (WEEK, ...) для вот такого запроса!
"Вывести список всей продукции из таблицы Table1, реализованная в нечетные недели 2003 года"!
Спасибо огромное!
8 дек 14, 18:18    [16967794]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
o-o
Guest
select n, 
       DATEADD(DAY, n, '20131231') as dt, 
       DATENAME(DW, DATEADD(DAY, n, '20131231')) as dw,
       DATEPART(ISO_WEEK, DATEADD(DAY, n, '20131231')) as wk,
       case DATEPART(ISO_WEEK, DATEADD(DAY, n, '20131231')) % 2
          when 1 then 'odd'
          else 'even'
       end as evenness   
from dbo.Nums
---
n	dt	                dw	        wk	evenness
1	2014-01-01 00:00:00.000	Wednesday	1	odd
2	2014-01-02 00:00:00.000	Thursday	1	odd
3	2014-01-03 00:00:00.000	Friday	        1       odd
4	2014-01-04 00:00:00.000	Saturday	1	odd
5	2014-01-05 00:00:00.000	Sunday	        1	odd
6	2014-01-06 00:00:00.000	Monday	        2       even
7	2014-01-07 00:00:00.000	Tuesday	        2	even
8	2014-01-08 00:00:00.000	Wednesday	2	even
9	2014-01-09 00:00:00.000	Thursday	2	even
10	2014-01-10 00:00:00.000	Friday	        2       even
11	2014-01-11 00:00:00.000	Saturday	2	even
12	2014-01-12 00:00:00.000	Sunday	        2	even
13	2014-01-13 00:00:00.000	Monday	        3       odd
...
8 дек 14, 21:50    [16968750]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Добрый вечер, друзья!
Я к вам все еще по тому же вопросу, что и в заглавие темы! Дело в том, что прочел все, что хоть как то могло бы помочь мне с решением данной задачи, но все напрасно, так как до сих пор не смог понять, как решить задачу!
На фотке изображена таблица Storage в которой находится определенное количество записей!
Мне нужно вывести поля "КодСырья" и "Цена", у которых "ДатаДвижения" равна НЕЧЕТНЫМ неделям 2003 года!
Спасибо заранее!

К сообщению приложен файл. Размер - 42Kb
19 дек 14, 21:32    [17025864]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
o-o
Guest
adimmat,

я !!!!! тоже !!!!! знаки !!!!! лепить !!!!! умею !!!!!
восклицательные !!!!! в !!!!! том!!!!! числе!!!!!

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

 select [КодСырья], [Цена]
 from Storage
 where [ДатаДвижения] >= 2003 and [ДатаДвижения] < 2004
       and (DATEPART(ISO_WEEK, [ДатаДвижения]) % 2 = 1)
19 дек 14, 21:47    [17025934]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
o-o, Огромное спасибо!
19 дек 14, 21:49    [17025942]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
o-o
Guest
adimmat,
там у меня немного наврано, я надеюсь, вы переправили:
select [КодСырья], [Цена]
 from Storage
 where [ДатаДвижения] >= '20030101' and [ДатаДвижения] < '20040101'
       and (DATEPART(ISO_WEEK, [ДатаДвижения]) % 2 = 1)
20 дек 14, 01:24    [17026783]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
o-o, Добрый день!
Огромное спасибо, еще раз, за помощь! Я исправил то, что было чуть неверное. Вот такой сейчас у меня запрос:
select 
	Stores.Store,
	Storage.Количество,

from 
	Materials_Types LEFT JOIN
	Materials ON Materials_Types.ID = Materials.Material_Type_ID LEFT JOIN
	Storage ON Materials.ID = Storage.КодСырья LEFT JOIN
	Stores ON Storage.КодСкладаДвиж = Stores.ID

WHERE 
	Materials_Types.ID = 9 AND 
	--([Storage].[Датадвижения] >= '2003-01-01' AND [Storage].[Датадвижения] < '2004-01-01') AND
	(DATEPART (YEAR, [Storage].[Датадвижения]) BETWEEN '2003' AND '2004') AND
	--([Storage].[Датадвижения] BETWEEN '2003-01-01' AND '2004-01-01') AND
	(DATEPART (ISO_WEEK, [Storage].[Датадвижения]) % 2 = 0)

	GROUP BY
		Stores.Store,
		Storage.Количество


Единственное, что еще не хватает, нужно, чтобы в выборке было еще Номер недели, т.е 2-4-6-8-10 и.т.д! К сожалению, я не смог это реализовать! Был бы вам признателен, если бы Вы помогли мне с этим.
Спасибо!
20 дек 14, 10:39    [17027280]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
adimmat,
(DATEPART (YEAR, [Storage].[Датадвижения]) BETWEEN '2003' AND '2004') AND
замените на
[Storage].[Датадвижения]>='2003' AND [Storage].[Датадвижения]<'2005' AND
20 дек 14, 14:21    [17027691]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
iap, Спасибо огромное за ваше замечание.
20 дек 14, 16:07    [17027841]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
iap, Только, одно непонятно, почему 2005 год, Вы, наверное, ошиблись?!
20 дек 14, 16:23    [17027861]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
adimmat
iap, Только, одно непонятно, почему 2005 год, Вы, наверное, ошиблись?!
Конечно же не ошибся.
"Меньше 2005" - это означает "меньше или равно последнему мгновению 2004 года"
20 дек 14, 16:37    [17027892]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
iap, все, понял! А почему, конструкция (DATEPART (YEAR, [Storage].[Датадвижения]) BETWEEN '2003' AND '2004') AND является неверной?
20 дек 14, 16:47    [17027901]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
И мне нужна выборка именно за 2003 год! Зачем мне 2004 еще брать?
20 дек 14, 16:48    [17027902]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
adimmat
И мне нужна выборка именно за 2003 год! Зачем мне 2004 еще брать?
По-Вашему, что означает "BETWEEN '2003' AND '2004'"?
20 дек 14, 17:19    [17027949]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
adimmat
iap, все, понял! А почему, конструкция (DATEPART (YEAR, [Storage].[Датадвижения]) BETWEEN '2003' AND '2004') AND является неверной?
Гуглите по слову "SARGable"
20 дек 14, 17:21    [17027951]     Ответить | Цитировать Сообщить модератору
 Re: Нечетные недели года!  [new]
o-o
Guest
iap
adimmat
iap, Только, одно непонятно, почему 2005 год, Вы, наверное, ошиблись?!
Конечно же не ошибся.
"Меньше 2005" - это означает "меньше или равно последнему мгновению 2004 года"

тут 2 варианта: или iap невнимательно прочел условие
adimmat
у которых "ДатаДвижения" равна НЕЧЕТНЫМ неделям 2003 года!

или просто подстраховался, ибо перепиши он мое
o-o
 where [ДатаДвижения] >= '20030101' and [ДатаДвижения] < '20040101'

просто заменив '20030101' на '2003', '20040101' на '2004'
с большой вероятностью получил бы: iap -- экономит на цифрах, с меня станется

---
a у меня к вам встречный вопрос, вы четное/нечетное точно не путаете?
откуда
(DATEPART (ISO_WEEK, [Storage].[Датадвижения]) % 2 = 0)

в оригинале было "= 1"
:)
20 дек 14, 19:46    [17028247]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить