AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-88709

Daniel's questions

Martin Hope
Daniel
Asked: 2022-09-01 21:16:40 +0800 CST

Selecione o campo único mais recente de um SELECT DISTINCT combinado?

  • 0

Eu tenho a seguinte tabela no SQL Server 2019.

  • A linha com a mais alta idé a linha mais nova.
  • A coluna obj_idtem um identificador imutável para um objeto.
  • A coluna obj_nametem o nome do objeto no momento em que a linha foi adicionada.
Eu iria nome_obj obj_id
5 agora1 1
1 anterior-anterior1 1
6 agora2 2
4 anterior1 1
3 anterior2 2
2 anterior-anterior2 2

O que eu preciso é o mais recente object_name.

nome_obj
agora1
agora2

Tentei muitas coisas, sem sucesso. Uma das minhas ideias foi fazer o seguinte

SELECT DISTINCT
    [obj_name]
FROM
    [Table]
ORDER BY 
    [id] DESC

que falhou com este erro:

Os itens ORDER BY devem aparecer na lista de seleção se SELECT DISTINCT for especificado

Qual é uma maneira eficiente de atingir meu objetivo?

sql-server t-sql
  • 2 respostas
  • 57 Views
Martin Hope
Daniel
Asked: 2018-02-08 01:17:36 +0800 CST

Precisa de ajuda com a consulta em três tabelas relacionadas

  • 1

Estou projetando um banco de dados para uma editora para rastrear o envio de revistas e também para manter um histórico dele.

Eu tenho três tabelas (simplificadas):

insira a descrição da imagem aqui

Subscriber
  id (pk)
  subscribers_number (unique)
  first_name
  last_name
  shipping_address
  last_payment

Shipping
  id (pk)
  date
  issue

ShippingAddress
  id (pk)
  shipping_id (fk)
  subscriber_id (fk)
  subscribers_number
  first_name
  last_name
  shipping_address

NonDeliveryReport
  id (pk)
  shipping_address_id (fk)
  reason
  resolved

Subscriberé uma lista de pessoas que pagam para receber uma edição mensal de sua revista. Nem todo assinante é elegível para receber a próxima edição. Para simplificar, um assinante recebe a próxima edição apenas se last_paymenta data estiver nos últimos 60 dias. Há mais algumas condições, mas falarei sobre isso mais tarde.

Quando a próxima edição estiver pronta para ser enviada, um Shippingserá criado.

Em seguida, selecionamos todos os Subscribers elegíveis e criamos um ShippingAddresspara cada um e copiamos o valor de subscribers_number, e first_namede para o novo . Fazemos isso para que tenhamos um histórico de envios imutável, mesmo que mude de endereço ou seja excluído do banco de dados. Para facilitar o uso, há uma chave estrangeira anulável além da cópia impressa do arquivo .last_nameshipping_addressSubscriberShippingAddressSubscribersubscriber_idsubscribers_number

Se a empresa de correio não puder entregar a um assinante ShippingAddress, eles retornarão um relatório de não entrega para nós. Para cada relatório, um NonDeliveryReporté criado e faz referência ao arquivo ShippingAddress.

Agora estamos chegando à parte importante da minha pergunta:

Quando criamos um Frete, temos que selecionar todos os Subscribers, que são elegíveis. Elegível é todo assinante, exceto qualquer um, que tenha um relatório de não entrega anexado a ele, que NÃO seja resolved. (Para simplificar, simplesmente ignoramos todas as outras condições.)

Então eu preciso de duas consultas:

  1. Selecione todas as assinaturas qualificadas.
  2. Selecione todos os assinantes que não são elegíveis.

A consulta nº 2 foi gerenciável e bastante fácil:

SELECT DISTINCT
  Subscriber.id
FROM Subscriber
  INNER JOIN ShippingAddress ON (Subscriber.id = ShippingAddress.subscriber_id)
  INNER JOIN NonDeliveryReport ON (ShippingAddress.id = NonDeliveryReport.shipping_address_id)
WHERE NonDeliveryReport.resolved IS NULL;

Mas as consultas que escrevi para o caso nº 1 sempre retornaram menos ou mais resultados do que o esperado. Estou preso nisso desde a semana passada e simplesmente não consigo fazê-lo funcionar. Espero que você possa me ajudar com isso.

Isso não faz parte da minha pergunta principal, mas quaisquer pensamentos (em forma de comentários, por favor) sobre o design do meu banco de dados são bem-vindos. Eu já estava pensando em adicionar um campo deliverable (bool)e Subscriberapenas preencher o valor programaticamente, ao importar os NDRs, mas estou hesitante porque isso provavelmente anularia o propósito da normalização do banco de dados.

Edit # 1: O fechamento que cheguei foi a seguinte consulta, mas ela retorna muitas linhas. *suspirar*

SELECT DISTINCT
  Subscriber.id
FROM Subscriber
  LEFT JOIN ShippingAddress ON (Subscriber.id = ShippingAddress.Subscriber_id)
  LEFT JOIN NonDeliveryReport ON (ShippingAddress.id = NonDeliveryReport.ShippingAddress_id)
WHERE NonDeliveryReport.korrigiert_am IS NOT NULL OR NonDeliveryReport.id IS NULL OR ShippingAddress.id IS NULL

Edit # 2: Depois de pensar ainda mais (eu não achava que isso fosse mais possível), encontrei uma solução.

Quando não qualificados são assinantes que têm um NDR aberto (resolvido IS NULL), então elegível é qualquer pessoa que não tenha NDR além de qualquer pessoa que tenha mais de 0 NDR não resolvido.

-- List of ELIGIBLE Subscribers
SELECT DISTINCT Subscriber.id
FROM Subscriber
LEFT JOIN ShippingAddress ON (Subscriber.id = ShippingAddress.subscriber_id)
WHERE ShippingAddress.id IS NULL OR Subscriber.id NOT IN
  (
    SELECT ShippingAddress.subscriber_id
    FROM ShippingAddress
    INNER JOIN NonDeliveryReport ON ShippingAddress.id = NonDeliveryReport.shipping_address_id
    WHERE (NonDeliveryReport.id IS NOT NULL AND NonDeliveryReport.resolved IS NULL)
    GROUP BY ShippingAddress.subscriber_id
  )
ORDER BY Subscriber.id;
database-design join
  • 4 respostas
  • 67 Views
Martin Hope
Daniel
Asked: 2017-04-29 09:11:26 +0800 CST

Se a sua tabela se chama Artigos, você nomeia sua coluna como número_artigo ou simplesmente número?

  • 0

Uma pergunta que me faço com bastante frequência é: Se minha tabela é nomeada articles, devo nomear minha coluna article_numberou simplesmente number?

Existe uma boa prática? Existe alguma diferença se você cria tabelas e colunas em um banco de dados, ou trabalha em uma camada abstrata como um ORM, onde a consulta talvez seja

a = Article.get(1);
my_num = a.number;
// or 
my_num2 = a.article_number
database-design
  • 3 respostas
  • 128 Views
Martin Hope
Daniel
Asked: 2016-03-04 01:06:05 +0800 CST

psql: FATAL: Falha na autenticação de peer para o usuário

  • 17

Acabei de instalar o PostgreSQL 9.4 no Ubuntu 15.10.

  1. Criei um usuário comcreateuser -P myuser
  2. Criei um banco de dados comcreatedb -O myuser mydatabase
  3. editei pg_hba.confe adicioneilocal mydatabase myuser md5
  4. Eu reiniciei o PostgreSQL comsudo service postgresql restart

O usuário myuser é apenas um usuário do PostgresSQL e não possui conta de usuário no Ubuntu.

Quando tento me conectar ao banco de dados psql -W mydatabase myuser, ele falha com o psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL está rodando…

● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

... e ouvindo.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

O que devo fazer para conectar com o usuário myuser ao banco de dados mydatabase ?

postgresql postgresql-9.4
  • 2 respostas
  • 58058 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve