Ответы пользователя по тегу PostgreSQL
  • Как сгенерировать строки с датами в sql?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Да уж ))
    Ну вообще думаю будет как-то так :
    Пример на MSSQL
    Пример на Psql13

    Результат:
    +========+============+=====================+
    | userid | regdate    | newdate             |
    +========+============+=====================+
    | 1      | 2020-11-01 | 2020-11-01 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2020-12-01 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2020-12-31 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2021-01-30 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2021-03-01 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2020-12-01 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2020-12-31 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2021-01-30 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2021-03-01 00:00:00 |
    +--------+------------+---------------------+
    Ответ написан
  • Как сделать выборку из таблицы и развернуть в строку?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Насколько понял, вам нужно попробовать реализовать "Pivot Table", но в PGSQL этой функции по умолчанию нет (я ей пользовался в MSSQL как встроенной). Если погуглить есть реализации этой функции на PGSQL через функцию "crosstab". Посмотрите, если устроит можете один раз организовать функцию и пользовать в подобных случаях. Но насколько это актуально конкретно для вас (может у вас всего 3 поля и имеет смысл просто запросом как в вашем примере реализовать) решать вам.
    Про языки, чтобы выбрать один указанный, оптимальнее использовать "coalesce( t.en, t.ru, t,ko)"

    UPD: т.к. имена полей у вас находятся в промежуточной таблице, если вы хотите чтобы значения "coalesce( t.en, t.ru, t,ko)" были в заголовках колонок, скорее всего придётся использовать "Динамический Pivot table" он несколько сложнее в организации, но производительней с точки зрения использования данных. Если же вас устроит "Fieidid" как заголовок колонки, можно воспользоваться обычным Pivot table.

    В MSSQL это выглядело бы примерно так:
    Select ItemId as ItemId,
    [fieldid1], [fieldid2], [fieldid3], [fieldid4], [fieldid5] 
    From
    (Select 
    	items.id as ItemId,
    	Coalesce(itemfields.en,itemfields.ru,itemfields.ko) as FieldName,
    	itemfields.fieldid as fieldid,
    	fields.key as value
    From
    	from items as items
    	left join item_fields as item_fields on items.id = item_fields.item_id
    		left join fields as fields On item_fields.fieldid = fields.id) SourceTable
    pivot
    (
    Max(value) for fieldid in ([fieldid1], [fieldid2], [fieldid3], [fieldid4], [fieldid5] )
    ) as PivotTable;
    Ответ написан
  • Как написать функцию замены вместо множества replace на sql?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Задача то какая ? судя по коду запроса, вы имя пытаетесь заменить иницалом ... если это так тогда так наверн :
    Select 
          case when <условие при котором надо брать 2 символа> then
               UPPER(Left(name, 2))
         else 
               UPPER(Left(name, 1))
          end
    from
    table1
    Ответ написан
  • Почему база созданная через psql не пригодна для использования в 1С?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Вручную, базы для 1С обычно не создаются по нескольким причинам.
    Одна из основных - структура таблиц, (в т.ч. имена полей и таблиц) должна быть в точности как 1С планируется её использовать. (Имена таблиц, далее будут записаны в соответствие, в отдельной таблице)
    Также после создания , эта структура бд, должна быть в опр. виде в двоичных данных в нескольких "Служебных таблицах", в точности воссоздать которую - дело крайне проблематичное.
    Если у вас есть желание создавать базы скриптом, самый простой способ - создать "пустышку" из 1С, создать бэкап, а далее его разворачивать там, где вам необходимо.
    З.Ы.: даже пустая база, созданная из 1С, по факту будет не пустой, в ней будет куча служебных данных. Именно поэтому, ваша база выдала ошибку при подключении к кластеру (не были обнаружены, служебные данные в служебных таблицах)
    Ответ написан
  • Должен ли одинаковый запрос выполнятся с разным временем?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    ИМХО:
    1. Чтобы запрос корректно отсек лишние данные у вас должен быть Актуальный индекс по полю "date" в таблице "route_list_date".
    2. Не помешал был актуальный индекс по полю "id" в таблицах "route_list_date" и по полю "route_list_date_id" в таблице "route_list" (чтобы внутреннее соединение прошло быстрее.)
    Ответ написан