2015-06-22 2 views
-1

У меня есть бесплатный api-канал для дома, который поставляет мою базу данных почасово. База данных Open House содержит: MLS #, Агент по листингу, Листинг, адрес, дату открытия дома, следующую дату открытия дома.Лучшая практика добавления строк из таблицы в таблицу

Я хочу создать новую таблицу, в которой будут храниться все записи для даты открытого дома и следующей даты открытого дома. Я могу иметь дубликаты MLS #, но мне нужно иметь разные даты открытых домов.

Открыть дом таблицы: Текущая неделя

-------------------------------------- 
MLS | Open Date | Next Open Date 
12433 | 6/24/15 | 6/25/15   
23223 | 6/22/15 | 6/23/15   
35325 | 6/23/15 | 7/01/15  
-------------------------------------- 

Открытый дом стол: На прошлой неделе

-------------------------------------- 
MLS | Open Date | Next Open Date 
12433 | 6/15/15 | n/a  
23223 | 6/18/15 | 6/20/15   
35325 | 6/07/15 | n/a 
-------------------------------------- 

Все Open House История таблицы:

-------------------------------------- 
MLS | Open Date | Next Open Date 
12433 | 6/24/15 | 6/25/15   
23223 | 6/22/15 | 6/23/15   
35325 | 6/23/15 | 7/01/15 
12433 | 6/15/15 | n/a  
23223 | 6/18/15 | 6/20/15   
35325 | 6/07/15 | n/a   
-------------------------------------- 

История таблица может иметь те же Mls # но не может иметь такую ​​же открытую дату и следующую открытую дату.

Я пробовал:

INSERT INTO open_house_history (mls_id, open_date, next_open_date) 
SELECT mls_id, open_date, next_open_date 
FROM open_house 
WHERE open_date NOT IN (SELECT open_date FROM open_house_history) 
AND mls_id IN (SELECT mls_id FROM open_house_history) 

Пожалуйста, помогите! Thankyou

+0

Что вы пробовали до сих пор? Или вы просите нас написать код? http://stackoverflow.com/help/how-to-ask – tvgemert

+0

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. Я бы предположил, что вы нашли форум для разработки (возможно, [quora] (http://www.quora.com/Computer-Programming)?), чтобы выработать общие положения. Затем, когда у вас возникнут проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –

+0

Так в чем же проблема с SQL, которую вы пробовали? Это ошибка? Вы получаете неправильные результаты? – Mureinik

ответ

0

В вашем запросе есть проблема, поскольку вы исключаете все записи, в которых дата открытия уже находится в вашей таблице.

WHERE open_date NOT IN (SELECT open_date FROM open_house_history) 

Если вы хотите получить другой список с той же датой, оно будет исключено. Также исключается листинг с тем же идентификатором, но с другой датой.

В случаях, подобных этому, я объединить все поля в одну строку, и использовать это для сравнения:

INSERT INTO open_house_history (mls_id, open_date, next_open_date) 
SELECT mls_id, open_date, next_open_date 
FROM open_house 
WHERE CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id NOT IN (SELECT CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id FROM open_house_history) 
+0

Зачем мне преобразовывать его в varchar? его поле datetime – Edward

+0

Вы конвертируете дату, чтобы объединить ее и идентификатор MLS в одном текстовом поле, чтобы вы могли проверить, была ли ранее добавлена ​​предыдущая комбинация. Если вы проверите одно или другое, вы проигнорируете другие идентификаторы MLS с той же датой и одним и тем же идентификатором MLS с другой датой. –

+0

Есть ли более простой способ этого. Похоже, они создали дополнительную колонку. – Edward

Смежные вопросы