私は2つのmysqlテーブルを持っています-セールステーブル:
+----------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------+------+-----+---------+-------+
| StoreId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemId | bigint(20) unsigned | NO | | NULL | |
| SaleWeek | int(10) unsigned | NO | PRI | NULL | |
+----------------+------------------------------+------+-----+---------+-------+
そして、itemsテーブル:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Salesテーブルには、各ItemID---SaleWeekごとに複数のレコードが含まれています。次のように2つのテーブルを結合して販売されたすべてのアイテムを選択します。
SELECT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
ただし、これは、各SaleWeekの複数のエントリに基づいて複数のItemId値を返します。明確な選択を行って1つだけを返すことはできますかItemID-最新のクエリを実行したくないSaleWeek一部のアイテムには最新のエントリがない可能性があるためSaleWeekなので、最後のセールを取得する必要があります。 [〜#〜] distinct [〜#〜]を指定する必要がありますか、それともLEFT OUTER JOINを使用する必要がありますか?
DISTINCT
は、探していることを実行する必要があります。
SELECT DISTINCT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
それは明確なitems.ItemName, items.ItemId
タプル。
あなたは販売週についてもコメントしました。そして、最新の週が欲しいので、GROUP BYを使ってみるとよいでしょう。
SELECT
items.ItemName,
items.ItemId,
max( Sales.SaleWeek ) MostRecentSaleWeek
FROM
items JOIN sales ON items.ItemId = sales.ItemId
WHERE
sales.StoreID = ?
GROUP BY
items.ItemID,
items.ItemName
ORDER BY
MostRecentSaleWeek, -- ordinal column number 3 via the MAX() call
items.ItemName
その列に基づいて必要な場合は、ORDER BYを序数の3番目の列参照に変更する必要がある場合があります。
これを使用できます:
INSERT INTO `test_table` (`id`, `name`) SELECT DISTINCT
a.`employee_id`,b.`first_name` FROM `employee_leave_details`as a INNER JOIN
`employee_register` as b ON a.`employee_id` = b.`employee_id`
SELECT u.user_name,u.user_id, u.user_country,u.user_phone_no,ind.Industry_name,inv.id,u.user_email
FROM invitations inv
LEFT JOIN users u
ON inv.sender_id = u.user_id
LEFT JOIN employee_info ei
ON inv.sender_id=ei.employee_fb_id
LEFT JOIN industries ind
ON ei.industry_id=ind.id
WHERE inv.receiver_id='XXX'
AND inv.invitation_status='0'
AND inv.invitati
on_status_desc='PENDING'
GROUP BY (user_id)