Domanda

Ho due tabelle nel mio database, uno per In e uno per Out. Hanno due colonne, Quantity e Price. Come faccio a scrivere uno SQL-query che seleziona il prezzo giusto?

Nel esempio: se ho 3 elementi per 75 e poi 3 elementi per 80. Poi ho due per 75 , e il terzo dovrebbe essere per 75 (X) e la quarta dovrebbe essere per 80 (Y).

Come faccio a scrivere la domanda prezzo per X e Y? Essi dovrebbero utilizzare il prezzo dalla terza fila e indietro. In esempio, esiste un modo per selezionare la terza riga della tabella In? Non posso usare auto_increment come identificatore per vale a dire "terzo" fila, perché le tabelle conterranno posto per altre voci anche. Le righe non saranno cancellati, che verranno salvate per motivi di responsabilità.

SELECT Price FROM In WHERE ...?

NUOVO la progettazione di database:

+----+
| In |
+----+------+-------+
| Supply_ID | Price |
+-----------+-------+
|     1     |  75   |
|     1     |  75   |
|     1     |  75   |
|     2     |  80   |
|     2     |  80   |
+-----------+-------+
+-----+
| Out |
+-----+-------+-------+
| Delivery_ID | Price |
+-------------+-------+
|      1      |  75   |
|      1      |  75   |
|      2      |   X   | <- ?
|      3      |   Y   | <- ?
+-------------+-------+

OLD la progettazione di database:

+----+
| In |
+----+------+----------+-------+
| Supply_ID | Quantity | Price |
+-----------+----------+-------+
|     1     |  3       |  75   |
|     2     |  3       |  80   |
+-----------+----------+-------+

+-----+
| Out |
+-----+-------+----------+-------+
| Delivery_ID | Quantity | Price |
+-------------+----------+-------+
|      1      |  2       |  75   |
|      2      |  1       |   X   | <- ?
|      3      |  1       |   Y   | <- ?
+-------------+----------+-------+
È stato utile?

Soluzione

Leggendo i commenti che dici che si è disposti ad aggiungere un incremento automatico o un campo data per conoscere la corretta posizione di ogni riga. Una volta aggiunto questo mi sento di raccomandare l'aggiunta di una riga in più alla In tabella denominata elaborato che viene automaticamente impostata su false quando la riga viene aggiunta alla tabella. Qualsiasi file che sono stati copiati su OUT hanno già depositato il loro set elaborati su true.

+----+
| In |
+-----------+-----------+-------+-----------+
| AUtoId    | Supply_ID | Price | Processed |
+-----------+-----------+-------+-----------+
|     1     |     1     |  75   |     1     |
|     2     |     1     |  75   |     1     |
|     3     |     1     |  75   |     0     |
|     4     |     2     |  80   |     0     |
|     5     |     2     |  80   |     0     |
+-----------+-----------+-------+---------- +

Poi, per trovare la voce successiva per passare a OUT si può fare

SELECT TOP 1 Supply_ID, Price 
FROM In WHERE Processed = 0
ORDER BY [Your Auto Increment Field or Date]

Una volta che la riga viene spostato OUT poi basta aggiornare il campo trasformati della riga per true.

Altri suggerimenti

Non riesco a vedere una query semplice che avrebbe aiutato qui. Per simulare una FIFO in SQL Vorrei guardare a tre tavoli, il funzionamento, OUT e FIFO. FUNZIONAMENTO è effettivamente un log delle transazioni e la tabella FIFO è stato FIFO e OUT sono le risposte da parte del FIFO.

Si potrebbe aggiornare corrente con le operazioni (l'aggiunta e la rimozione di elementi) come vengono nelle richieste tavolo e processo di funzionamento per la voce 'fuori di nella tabella OUT decrementare i valori nella FIFO e ove necessario rimuovere i record dalla tabella FIFO .

Anche allora non vedo una semplice query per elaborare il tutto come ci sia la necessità di interrogare il primo record per vedere se v'è una quantità sufficiente per ogni operazione, l'aggiornamento di quel disco in modo appropriato e l'interrogazione di ulteriori record in cui il operazione non può essere soddisfatta. Il mio livello di abilità SQL non mi portare a una semplice soluzione a questo, esso costituisce la logica di business per me e viene sollevato in quel livello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top