2015-02-10 62 views
0

我試圖在相同的日曆月內顯示一個帳戶列表,其中有兩個相同的產品已經爲同一個帳戶訂購。SQL - 根據多個條件檢索數據

字段名稱:

A/c number, 
Order id, 
Cust name, 
Product, 
Purchase date 

我已經使用GROUP BY和HAVING,但我關心的記錄容量返回。

+3

請編輯您的問題,說明你正在使用的查詢,並解釋爲什麼你是「關心返回的記錄量「。 – 2015-02-10 17:51:48

+0

我在猜測訂單ID字段是什麼扔掉你,刪除該字段。你也有計數字段爲> 1? – JB13 2015-02-10 17:55:31

+0

你正在使用哪些DBMS? Postgres的?甲骨文? – 2015-02-10 18:52:53

回答

0

我建議在同一張桌子上做兩次內連接。喜歡的東西:

SELECT o1.* 
FROM orders o1 
INNER JOIN orders o2 
    ON o1.account_num = o2.account_num 
    AND o1.product_id = o2.product_id 
    AND MONTH(o1.purchase_date) = MONTH(o2.purchase_date) 
    AND YEAR(o1.purchase_date) = YEAR(o2.purchase_date) 

我只是想指出,你必須同時匹配的幾個月和幾年,以避免與2015分之1

0
SELECT * 
FROM TABLE as table2 
INNER JOIN table as table1 
on table1.product = table2.product AND MONTH(table1.purchase_date) = MONTH(tabl2.purchase_date) AND YEAR(table1.purchase_date) = YEAR(table2.purchase_date) 

這應該是訣竅。

0

假設我們沒有table names,並且缺少數據,這裏是一個將返回所需內容的查詢示例。只需將字段/表名稱更改爲您正在使用的任何內容。

SELECT account_name 
    FROM purchaseTable 
    JOIN productTable on purchaseTable.product = productTable.id 
    WHERE MONTH(purchaseTable.purchase_date) = MONTH(productTable.purchase_date) 
    AND YEAR(purchaseTable.purchase_date) = YEAR(productTable.purchase_date) 
    HAVING COUNT(*) = 2 
    GROUP BY account_name; 
+0

年份也需要檢查。沒有意義加入到我認爲的產品中。 – shawnt00 2015-02-10 18:18:55

+0

您剛剛添加了YEAR()條件。我知道很難猜測表名,但我認爲產品表不可能是必需的。 – shawnt00 2015-02-10 18:24:45

+0

恩,我想是的,讓我們拭目以待,看看OP會更喜歡什麼。 – 2015-02-10 18:25:30

0
select * 
from accounts 
where account_id in (
    select o.account_id 
    from orders as o inner join line_items as li on li.order_id = o.order_id 
    group by o.account_id, li.product_id, year(o.purchase_date), month(o.purchase_date) 
    having count(*) = 2 
) 

簡單的方法來匹配上二千零十四分之一購買的東西獲取帳戶信息,儘管您失去了購買信息。

下面是保持信息既order_ids和訂單的日曆月一起的方法:

select * 
from 
    accounts as a inner join 
    (
    select 
     o.account_id, li.product_id, 
     year(o.purchase_date) as purchase_yr, month(o.purchase_date) as purchase_mo, 
     min(o.order_id) as order_id1, max(o.order_id) as order_id2 
    from orders as o inner join line_items as li on li.order_id = o.order_id 
    group by o.account_id, li.product_id, year(o.purchase_date), month(o.purchase_date) 
    having count(*) = 2 
    ) as multiples 
     on multiples.account_id = a.account_id