Android sqlite / Ms sql / sql query - PullRequest
       0

Android sqlite / Ms sql / sql query

0 голосов
/ 31 августа 2011

У меня есть Product Table & priceDeatil table.

 Prouct Table
 ProductCode  BusinessUnit 
 10001        ORB          
 10002        ORB          

 StockRecord Table
 ProductCode    Name       StcokQuantity 
  10001         SUnSilk    1000
  10002         Pen         500

priceDeatil 
ProductCode  BusinessUnit  price   DateFrom     DateTo
10001         ORB          12.00   12-08-2011   31-09-2015
10001         ORB          21.00   01.08-2011   15-09-2011
10002         ORB          54.00   21.08-2011   15-09-2011

Я хочу получить запись таблицы продукта, таблицу StockRecords и цену для этого продукта последняя цена

Здесь productCode 10001 содержит 2 записикогда я запускаю запрос, он возвращает 2 записи. Я хочу получить только одну запись.

 SELECT     WMProduct.BusinessUnit, WMProduct.ProductCode, StockRecord.Name, WMPriceDetail.Price
 FROM       WMProduct INNER JOIN StockRecord
            ON WMProduct.ProductCode = StockRecord.ProductCode
           INNER JOIN WMPriceDetail
            WMPriceDetail ON WMProduct.BusinessUnit = WMPriceDetail.BusinessUnit AND WMPriceDetail.ProductCode = WMProduct.ProductCode

 WHERE     (WMPriceDetail.DateFrom < GETDATE()) AND (WMPriceDetail.DateTo > GETDATE() OR
            WMPriceDetail.DateTo = NULL)

Этот запрос возвращает

   BusinessUnit ProductCode     Name   Price
     ORB         10001         SunSilk    12.00
     ORB         10001         SunSilk    21.00

Но мне нужны только одна запись .... BusinessUnit ProductCodeНазвание Цена ORB 10001 SunSilk 21,00 ORB 10002 Pen 54.00

Из этого запроса я не могу поставить TOP 1, потому что есть еще объединение таблиц .. присоединиться

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

Пожалуйста, помогите мне ....

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

как я понял, вам нужна только максимальная цена из цены:

SELECT WMProduct.BusinessUnit,
       WMProduct.ProductCode ,
       WMProduct.Description ,
       price_detail.price
FROM   WMProduct
       INNER JOIN
              ( SELECT  MAX(Price) AS price,
                       BusinessUnit        ,
                       ProductCode
              FROM     WMPriceDetail
              GROUP BY BusinessUnit,
                       ProductCode
              )
              price_detail
       ON     price_detail.BusinessUnit = WMProduct.BusinessUnit
       AND    price_detail.ProductCode  = WMProduct.ProductCode
WHERE  (
              WMPriceDetail.DateFrom < GETDATE()
       )
AND
       (
              WMPriceDetail.DateTo > GETDATE()
       OR     WMPriceDetail.DateTo = NULL
       )
0 голосов
/ 06 сентября 2011

Попробуйте этого друга:

 select p.businessunit, p.productcode, pr.price from
 WMProduct p ,WMStockRecord s, WMPriceDetail pr
 where p.productcode = s.productcode and
    s.productcode = pr.productcode and p.productcode=pr.productcode and
    pr.datefrom = (select max(datefrom) from WMPriceDetail where productcode = p.productcode  and
  (
    ( DateFrom < 'Sep 06 2011') AND (DateTo > 'Sep 06 2011' OR DateTo IS NULL) 
  ) 
0 голосов
/ 31 августа 2011

Вы можете использовать топ 1 с объединением ...

Просто выберите топ 1 и т. Д., Как вы уже сделали. так что

select top 1 a.name, b.name from table1 a join table2 b on a.id=b.id

Ваша вторая проблема заключается в том, что вы не обязательно получите правильную строку, возвращаемую, поскольку вы не упорядочиваете результаты перед выполнением топ-1.

- обновление

Кажется, sqlite не понимает top, но понимает LIMIT. Смотри http://www.sqlite.org/lang_select.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...