He11_t0r4 0 Опубликовано: 7 декабря 2010 Собственно появилась личная необходимость сделать выгрузку из SQL базы в Excel таблицы состоящей из 2 колонок, в первой уникальная дата за определенный день (только дата), во второй сумма за этот день. Вся конструкция вот: Казалось бы ничего сложного, но в результате выдает совсем не то, что хотелось бы: ... итд А должно быть вида: День - Сумма, День - Сумма итд. Очевидно, что так сортируется из-за того, что date() используется только в визуальных целях и distinct() ее не учитывает, и видит все в таком виде: ... итд И из-за разницы во времени выдает все строки за один и тот же день как уникальные, а не как одну. Все это осложняется еще и тем, что с SQL последний раз я работал года 1.5 назад. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LinT 0 Опубликовано: 7 декабря 2010 тебе нужно сделать сводную таблицу в экселе 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
He11_t0r4 0 Опубликовано: 7 декабря 2010 Не хотелось бы выгружать в эксель все строки за день, для дальнейшей сортировки (их там порядка 2000-2500 в день), надо сделать все на уровне SQL, чтобы загружалось всего 30. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
p_307_WRC 0 Опубликовано: 7 декабря 2010 (изменено) а чо за сайт то? надо на sql injection проверить Изменено 7 декабря 2010 пользователем p_307_WRC 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Maksim 0 Опубликовано: 8 декабря 2010 Сам же причину сказал про время: отрежь время и оставь только дату в аргументе distinct. После этого должно работать, как отрезать, выбирай сам, ибо версию сервера знаешь только ты. Примеры: http://codelab.ru/source/573/ http://www.sql.ru/faq/faq_topic.aspx?fid=110 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
He11_t0r4 0 Опубликовано: 8 декабря 2010 Там оказалось что даже при использовании cast(), distinct сравнивает обе колонки вместе, а не по одной, и проблема должна решаться при грамотно написанной группировке, но до нее уже мне мозгом дойти не удается. Отписал на sql.ru думаю там найдут решение. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
He11_t0r4 0 Опубликовано: 8 декабря 2010 (изменено) Ну собственно так и получилось. Вот рабочий вариант: 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... Изменено 8 декабря 2010 пользователем He11_t0r4 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Maksim 0 Опубликовано: 8 декабря 2010 (изменено) эээ, а в group by время отсечь не забыл? ну раз разобрался значит норм. Изменено 8 декабря 2010 пользователем Maksim 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах