Перейти к публикации
Дедовский городской форум
He11_t0r4

Вопрос по SQL

Рекомендованные сообщения

Собственно появилась личная необходимость сделать выгрузку из SQL базы в Excel таблицы состоящей из 2 колонок, в первой уникальная дата за определенный день (только дата), во второй сумма за этот день.

Вся конструкция вот:

post-22-1291736091.jpg

Казалось бы ничего сложного, но в результате выдает совсем не то, что хотелось бы:

post-22-1291736300.jpg

...

итд

А должно быть вида: День - Сумма, День - Сумма итд.

 

Очевидно, что так сортируется из-за того, что date() используется только в визуальных целях и distinct() ее не учитывает, и видит все в таком виде:

post-22-1291736667.jpg

...

итд

И из-за разницы во времени выдает все строки за один и тот же день как уникальные, а не как одну.

 

Все это осложняется еще и тем, что с SQL последний раз я работал года 1.5 назад. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тебе нужно сделать сводную таблицу в экселе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не хотелось бы выгружать в эксель все строки за день, для дальнейшей сортировки (их там порядка 2000-2500 в день), надо сделать все на уровне SQL, чтобы загружалось всего 30.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а чо за сайт то? надо на sql injection проверить

Изменено пользователем p_307_WRC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Примеры:

http://codelab.ru/source/573/

http://www.sql.ru/faq/faq_topic.aspx?fid=110

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там оказалось что даже при использовании cast(), distinct сравнивает обе колонки вместе, а не по одной, и проблема должна решаться при грамотно написанной группировке, но до нее уже мне мозгом дойти не удается.

Отписал на sql.ru думаю там найдут решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну собственно так и получилось.

 

Вот рабочий вариант:

 

select cast(ph.handtimestamp as date), sum(ph.netamountwon)

from playerhandscashkeycolumns ph

join players pl on (pl.player_id = ph.player_id)

where pl.playername = 'aaa'

and ph.gametype_id = 47

and site_id= 2

and ph.handtimestamp > date_trunc( 'month', now() )

group by 1;

 

Все сводилось к групбай 1 вместо названия колонки. А ведь всего каких-то 2 года назад я кодил под oracle... :biggrin:

Изменено пользователем He11_t0r4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

эээ, а в group by время отсечь не забыл?

 

ну раз разобрался значит норм.

Изменено пользователем Maksim

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

×
×
  • Создать...