sql для выбора записи для последней даты

#sql #db2

#sql #db2

Вопрос:

Я дал задание по управлению запасами, где запасы могут быть трех типов (1-поставщик, 2-Компании, 3-заказчик),

у меня есть 2 таблицы (A и B) для ее ведения, которые используются для отслеживания текущего состояния, а B используются в качестве таблицы истории для отслеживания перемещения

начальным будет тип запаса 1, поэтому он будет вставлен в A, если компания купит его, таблица B будет вставлена из таблицы A для этой записи и обновит тип запаса в таблице A,

итак, чтобы получить остаток на складе до определенной даты, я могу прочитать из таблицы A,

но мне трудно получить начальный баланс запасов, где я должен читать из таблицы B

кто-нибудь может помочь, извините, если мой вопрос сбивает с толку

структура таблицы:

ТАБЛИЦА А

 NUM_REF CHAR (6) NOT NULL,
BRANCH CHAR (5) NOT NULL,
STOCK_TYPE  CHAR (3) NOT NULL,
INSERT_DATE TIMESTAMP NOT NULL
  

ТАБЛИЦА B

 NUM_RIF CHAR (6) NOT NULL,
BRANCH CHAR (5) NOT NULL,
STOCK_TYPE  CHAR (3) NOT NULL,
INSERT_DATE CHAR(2) NOT NULL,  
UPDATE_DATE TIMESTAMP NOT NULL
  

запись из таблицы A

 000295 10400 03 10/24/2011 5:11:12 PM  10/11/2011 12:27:21 PM
000338 10400 02 10/14/2011 7:51:56 PM  10/13/2011 12:54:28 PM
000399 10400 03 10/24/2011 6:25:53 PM  10/21/2011 6:13:20 PM 
000400 10400 02 10/14/2011 8:06:21 PM  10/14/2011 4:21:37 PM 
000410 10400 03 10/18/2011 5:17:36 PM  10/18/2011 5:17:36 PM 
000416 10400 03 10/18/2011 5:27:19 PM  10/18/2011 5:27:19 PM 
000420 10400 03 10/25/2011 6:18:35 PM  10/17/2011 3:01:49 PM 
000423 10400 03 10/25/2011 6:18:35 PM  10/17/2011 4:10:00 PM 
000450 10400 03 10/19/2011 4:45:38 PM  10/18/2011 2:30:40 PM 
  

запись из таблицы B

 000284 10400 01 10/10/2011 5:49:15 PM
000288 10400 01 10/11/2011 12:22:50 P
000289 10400 01 10/11/2011 12:23:35 P
000295 10400 01 10/11/2011 12:27:21 P
000295 10400 03 10/13/2011 2:47:33 PM
000295 10400 03 10/13/2011 2:58:31 PM
000295 10400 03 10/13/2011 3:22:19 PM
000295 10400 03 10/13/2011 4:34:07 PM
000295 10400 03 10/13/2011 4:41:08 PM
000295 10400 03 10/13/2011 4:41:40 PM
000295 10400 03 10/13/2011 4:45:05 PM
000295 10400 03 10/13/2011 4:46:36 PM
000295 10400 03 10/13/2011 4:56:03 PM
000295 10400 03 10/13/2011 4:58:47 PM
000295 10400 03 10/14/2011 11:15:47 A
000295 10400 03 10/14/2011 5:45:33 PM
000296 10400 01 10/11/2011 12:27:21 P
000328 10400 01 10/13/2011 12:20:49 P
000328 10400 03 10/14/2011 12:31:07 P
000328 10400 03 10/17/2011 3:41:45 PM
000328 10400 03 10/18/2011 12:14:21 P
000328 10400 02 10/20/2011 4:41:39 PM
000331 10400 01 10/13/2011 12:25:02 P
000331 10400 03 10/14/2011 3:03:31 PM
000331 10400 03 10/17/2011 3:54:02 PM
000333 10400 01 10/13/2011 12:33:19 P
000333 10400 03 10/14/2011 4:01:59 PM
000333 10400 03 10/18/2011 11:06:18 A
000337 10400 01 10/13/2011 12:52:23 P
000338 10400 01 10/13/2011 12:54:28 P
000369 10400 01 10/14/2011 12:33:43 P
000369 10400 02 10/14/2011 8:05:03 PM
000369 10400 03 10/17/2011 2:42:19 PM
000369 10400 03 10/18/2011 2:24:56 PM
000399 10400 01 10/21/2011 6:13:20 PM
000400 10400 01 10/14/2011 4:21:37 PM
000420 10400 01 10/17/2011 3:01:49 PM
000420 10400 03 10/17/2011 3:13:07 PM
000420 10400 03 10/25/2011 6:16:43 PM
000423 10400 01 10/17/2011 4:10:00 PM
000423 10400 03 10/25/2011 6:16:43 PM
000424 10400 01 10/17/2011 4:22:04 PM
000424 10400 03 10/25/2011 6:42:06 PM
000425 10400 01 10/17/2011 4:24:41 PM
000425 10400 03 10/25/2011 6:42:06 PM
  

Комментарии:

1. @user438159 Вы должны предоставить нам структуру двух таблиц.

2. Ваш вопрос немного сбивает с толку, может быть, если вы можете опубликовать некоторые примеры данных и любой код, который у вас уже есть?

Ответ №1:

Вы пытались Max(date) получить последнюю запись? Альтернативно, вы можете использовать Min(date) для самой ранней даты.

Я ограничил поиск последней датой закрытия месяца и использовал max(date) для получения последней записи до даты закрытия.

 Select item, max(inventorydate)
from table
where inventorydate is < '6/30/2011'
  

Ответ №2:

 SELECT StockId, Max(Date)
FROM (SELECT StockId, max(Date)
      FROM TableA
      GROUP BY StockId
      UNION ALL
      SELECT StockId, max(Date)
      FROM TableB
      GROUP BY StockId) a
GROUP BY StockId
  

Ответ №3:

 select * from tablea order by insert_date desc fetch first 1 row only for read only with ur