IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> SQL, Вывести календарь
сообщение
Сообщение #1


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот такая задача (см. аттач). Честно говоря не очень понимаю что делать.

Подскажите в какую сторону вообще копать с таким вопросом.



Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
сообщение
Сообщение #2


Гость






Цитата
в какую сторону вообще копать с таким вопросом.

Ежели SQL Аксессовский - можно попробовать копать в сторону Pivot Tables (запросы вида Transform ... Select ... From ... Pivot ...) и CrossTab Queries (потом посмотришь, как это выглядит в SQL-View "и всего делов" (С))

Насколько я помню, в ANSI SQL этого нет, возможно там есть нечто другое для организации перекрестных запросов.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Может как-то можно сделать средствами MySQL ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот такой запрос:
SQL
SELECT
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=1,table1.id,Null)) AS Sun,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=2,table1.id,Null)) AS Mon,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=3,table1.id,Null)) AS Tue,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=4,table1.id,Null)) AS Wed,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=5,table1.id,Null)) AS Thu,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=6,table1.id,Null)) AS Fri,
Sum(IIf(DatePart("w",DateSerial(Year(Date()),Month(Date()),table1.id))=7,table1.id,Null)) AS Sat
FROM Table1 GROUP BY DatePart("ww",DateSerial(Year(Date()),Month(Date()),table1.id))
ORDER BY DatePart("ww",DateSerial(Year(Date()),Month(Date()),table1.id));
Выводит вот такое:

Прикрепленное изображение

Можно попробовать и "перевернуть" табличку... А насчет MySQL - тоже можно, см. здесь: http://en.wikibooks.org/wiki/Programming:MySQL/Pivot_table

(поправил запрос, забыл впечатать Group By)

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Спасибо, появилась собственная мысль, если получится обязательно выложу.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


В общем пока вот что выходит, этот вариант на 2008г (на любой сделать легко, пока лень править константы) + не пойму пока как названия дней недели присандалить.

SQL
select
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 1 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 1 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 2 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 2 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 3 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 3 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 4 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 4 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 5 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 5 - 1 day), '') as '',
if (month('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 6 - 1 day) = month(now()), dayofmonth('2008-01-01 00:00:00' + INTERVAL (week(now()) + id) * 7 + 6 - 1 day), '') as ''
from tbl;


в таблице TBL одно поле id, забито значениями от 0 до 5

результат вида:

Код

    
+------+------+------+------+------+------+------+
|      |      |      |      |      |      |      |
+------+------+------+------+------+------+------+
|      | 1    | 2    | 3    | 4    | 5    | 6    |
| 7    | 8    | 9    | 10   | 11   | 12   | 13   |
| 14   | 15   | 16   | 17   | 18   | 19   | 20   |
| 21   | 22   | 23   | 24   | 25   | 26   | 27   |
| 28   | 29   | 30   | 31   |      |      |      |
|      |      |      |      |      |      |      |
+------+------+------+------+------+------+------+



Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


crazy.gif

таблицак tbl - одно поле - id, значения от 0 до 4 всключительно.

Почему-то код отрабатываеткорректно только на 2008 год ...

SQL
select
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 - 1 day), '') as 'Mon',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 1 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 1 - 1 day), '') as 'Tue',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 2 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 2 - 1 day), '') as 'Wed',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 3 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 3 - 1 day), '') as 'Thu',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 4 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 4 - 1 day), '') as 'Fri',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 5 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 5 - 1 day), '') as 'Sat',
if (month(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 6 - 1 day) = month(now()), dayofmonth(concat(year(now()), '-01-01 00:00:00') + INTERVAL (week(now()) + id) * 7 + 6 - 1 day), '') as 'Sun'
from tbl;




Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Почему-то код отрабатываеткорректно только на 2008 год ...
Хм... У меня что-то твой код показывает только нижние три строки, числа с 1-го по 13-е никак не хочет отображать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


!4.gif У меня тоже, чот я намудрил, надо разобраться.


нашел баг кажется.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


!low.gif

SQL
select
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 7 * id day), '')
as Mon,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 1 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 1 - 7 * id day), '')
as Tue,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 2 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 2 - 7 * id day), '')
as Wed,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 3 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 3 - 7 * id day), '')
as Thu,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 4 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 4 - 7 * id day), '')
as Fri,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 5 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 5 - 7 * id day), '')
as Sat,
if (month(now()) = month(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 6 - 7 * id day), dayofmonth(concat(year(now()), '-', month(now()), '-01 00:00:00') - INTERVAL weekday(concat(year(now()), '-', month(now()), '-01 00:00:00')) - 6 - 7 * id day), '')
as Sun from tbl;



В tbl:
0
1
2
3
4
5

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 16:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name