Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Запрос. Группировка с нумерацией / 11 сообщений из 11, страница 1 из 1
27.11.2017, 11:31
    #39559877
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Исходная таблица
NAMEDATEСмирнов2017-11-01Иванов2017-11-01Кузнецов2017-11-01Соколов2017-11-05Попов2017-11-05Лебедев2017-11-06Козлов2017-11-06Новиков2017-11-06Морозов2017-11-09Петров2017-11-09Волков2017-11-09Соловьёв2017-11-09Васильев2017-11-15Зайцев2017-11-15Павлов2017-11-15
CREATE TABLE
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE "DOC" (
NAME TEXT, 
DATE DATE
);

INSERT INTO "DOC" (NAME, DATE) VALUES("Смирнов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Иванов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Кузнецов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Соколов", "2017-11-05");
INSERT INTO "DOC" (NAME, DATE) VALUES("Попов", "2017-11-05");
INSERT INTO "DOC" (NAME, DATE) VALUES("Лебедев", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Козлов", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Новиков", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Морозов", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Петров", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Волков", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Соловьёв", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Васильев", "2017-11-15");
INSERT INTO "DOC" (NAME, DATE) VALUES("Зайцев", "2017-11-15");
INSERT INTO "DOC" (NAME, DATE) VALUES("Павлов", "2017-11-15")


Нужно получить таблицу с группированными и пронумерованными записями:
№ п/п Дата Кол-во1 2017-11-01 32 2017-11-05 23 2017-11-06 34 2017-11-09 45 2017-11-15 3
Помогите сделать запрос. Сложность в нумерации :
Код: plsql
1.
2.
3.
4.
SELECT "?" AS "№ п/п", 
"DATE" as "Дата", 
COUNT(*) AS "Кол-во"
FROM "DOC" AS B GROUP BY "DATE";
...
Рейтинг: 0 / 0
27.11.2017, 18:30
    #39560146
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Код: sql
1.
2.
with doc_cnt as (select date, count(*) as cnt from doc group by date)
select (select count(*)+1 from doc_cnt ds where ds.date<do.date), date, cnt from doc_cnt do;


Но вообще, нумерацию строк надо делать на клиенте.
...
Рейтинг: 0 / 0
27.11.2017, 20:56
    #39560185
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
White Owl,

Спасибо, запрос работает в SQLiteStudio.
Но оказалось, что используемый мной компонент не понимает инструкцию with.

Пока сделал через временную таблицу
Код: sql
1.
2.
3.
CREATE TEMP TABLE IF NOT EXISTS "DOC2" (DATE REAL, NUM INT, DESCR TEXT);
INSERT INTO "DOC2" SELECT "DATE", COUNT("DATE"), GROUP_CONCAT("NAME") FROM "DOC" GROUP BY "DATE" ORDER BY "DATE" ASC;
SELECT ROWID as "№ п/п", "DATE" AS "Дата", "NUM" AS "Кол-во", "DESCR" AS "Примечание" FROM "DOC2";
...
Рейтинг: 0 / 0
27.11.2017, 21:15
    #39560192
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Ghost WriterWhite Owl,

Спасибо, запрос работает в SQLiteStudio.
Но оказалось, что используемый мной компонент не понимает инструкцию with.Это как и почему??? Это ж синтаксис самого движка.


Ghost WriterПока сделал через временную таблицу
Код: sql
1.
2.
3.
CREATE TEMP TABLE IF NOT EXISTS "DOC2" (DATE REAL, NUM INT, DESCR TEXT);
INSERT INTO "DOC2" SELECT "DATE", COUNT("DATE"), GROUP_CONCAT("NAME") FROM "DOC" GROUP BY "DATE" ORDER BY "DATE" ASC;
SELECT ROWID as "№ п/п", "DATE" AS "Дата", "NUM" AS "Кол-во", "DESCR" AS "Примечание" FROM "DOC2";

Лучше все равно перенести этот функционал на клиента. И проще, и быстрее, и от сортировки зависеть не будет.
...
Рейтинг: 0 / 0
27.11.2017, 21:52
    #39560201
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
White OwlЭто как и почему??? Это ж синтаксис самого движка.это компонент для Delphi DISQLite3 с собственной реализацией API без использования оригинальной sqlite3.dll

White OwlЛучше все равно перенести этот функционал на клиента.Раньше так и было. Теперь буду стремитьс получать готовые отчеты, чтобы потом не переписывать клиент, а просто добавлять в список отчетов имя отчета + sql. Посмотрим как получится.

White Owlи от сортировки зависеть не будет.мне в любом случае лучше сортировать.
...
Рейтинг: 0 / 0
28.11.2017, 04:32
    #39560253
Запрос. Группировка с нумерацией
Ghost Writer,

временная таблица не нужна. сразу можно сделать всё одним запросом.... в том числе - без WITH
...
Рейтинг: 0 / 0
28.11.2017, 11:55
    #39560442
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Добрый Э - Эх,

эх, жаль, что не показали как )
...
Рейтинг: 0 / 0
28.11.2017, 18:48
    #39560805
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Ghost WriterДобрый Э - Эх,

эх, жаль, что не показали как )Ну например так.
Код: sql
1.
select (select count(distinct date)+1 from doc b where b.date<a.date), date, count(*) from doc a group by date;



Но ты ж на Дельфи пишешь? Там же полноценный MVC с легкостью делается. Зачем тебе переносить функции View в СУБД???
...
Рейтинг: 0 / 0
28.11.2017, 22:16
    #39560898
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
White Owl,

огромное спасибо! элегантно получилось )

White OwlЗачем тебе переносить функции View в СУБД???Не понял, что Вы имеете ввиду. Что отчеты смотреть в СУБД?
...
Рейтинг: 0 / 0
28.11.2017, 22:29
    #39560904
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Ghost WriterWhite OwlЗачем тебе переносить функции View в СУБД???Не понял, что Вы имеете ввиду. Что отчеты смотреть в СУБД?
Стандартный подход к работе с СУБД: https://en.wikipedia.org/wiki/Model–view–controller
Идеально ложится на TDataSet-TDBGrid-TDataSource.
При этом TDBGrid уже имеет нумерацию строк и тащить ее из базы совершенно не нужно.
...
Рейтинг: 0 / 0
28.11.2017, 23:06
    #39560922
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Группировка с нумерацией
Ясно. Нет, я не использую TDBGrid. Сразу в нужный формат (Excel, html, csv и т.п.)
И не слышал, что у TDBGrid есть такая фича. TDataSet может (DataSet.RecNo в OnCalcField)
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Запрос. Группировка с нумерацией / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]