首先,这是我第一次在这里发布问题。如果已经提出并回答了我的问题,请给我提供该问题的链接,因为即使我也不知道如何正确地提出这个问题。
所以我有一个带有这样记录的表。
ID ITEM_ID DATE OUT IN
1 1002 2019-01-20 1 NULL
2 1002 2019-01-22 NULL 2
3 1004 2019-01-23 4 NULL
4 1007 2019-01-23 4 NULL
5 1002 2019-01-24 1 NULL
6 1004 2019-01-26 NULL 13
7 1003 2019-02-03 NULL 35
我如何选择它使其在mysql中看起来像这样?
ITEM_ID DATE_OUT OUT DATE_IN IN
1002 2019-01-24 1 2019-01-22 2
1003 - - 2019-02-03 35
1004 2019-01-23 4 2019-01-26 13
1007 2019-01-23 4 - -
我想做的事情更像是将同一ITEM ID的多行连接成1个最新的IN日期和OUT的最新日期
edit:我添加了更多数据集,以进一步阐明我要实现的目标。
非常感谢一直在帮助我的人。
答案 0 :(得分:0)
如果该表名为dta,则为:
SELECT dta_out.ID,dta_in.ITEM_ID,dta_out.`DATE` DATE_OUT, dta_out.`OUT`, dta_in.`DATE` DATE_IN, dta_in.`IN` FROM dta dta_in
INNER JOIN dta dta_out
ON dta_in.ITEM_ID=dta_out.ITEM_ID
WHERE NOT dta_in.`IN` IS NULL AND NOT dta_out.`OUT` IS NULL
我使用了下表创建:
CREATE TABLE `dta` (
`ID` int(11) DEFAULT NULL,
`ITEM_ID` int(11) DEFAULT NULL,
`DATE` date DEFAULT NULL,
`OUT` int(11) DEFAULT NULL,
`IN` int(11) DEFAULT NULL
)
答案 1 :(得分:0)
首先,您的表创建错误,将其设置为这样
CREATE TABLE `your_database_name`.`new_table_name` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`item_id` INT(10) NULL,
`date_in` DATETIME NULL,
`date_out` DATETIME NULL,
`out` INT(10) NULL,
`in` INT(10) NULL,
PRIMARY KEY (`id`));
您应该分别存储日期,以便您可以更轻松地选择日期,并在查询中显示所需的内容:
SELECT id, item_id, date_out, out, date_in, in from new_table_name;
要从表格中选择想要的日期,是这样的:
SELECT ID, ITEM_ID, (SELECT DATE FROM table_name WHERE OUT IS NOT NULL) AS
DATE_OUT, OUT, (SELECT DATE FROM table_name WHERE IN IS NOT NULL) AS DATE_IN, IN
from table_name
上面的select在您的特定表上有特定的2行,请按照我在回答开始时发布的表格创建表,这样会使您的生活更轻松(我也给了您选择的机会)
答案 2 :(得分:0)
Yoy可以尝试使用左侧Join
SELECT a.id,a.item_id,b.date as date_out,`b.out` as 'out',a.date_in as date_in,`a.in` as 'in'
from table1 a left join table1 b
on item_id=item_id and `a.in` is not null and `b.out` is not null
答案 3 :(得分:0)
SELECT
a.item_id,
b.date AS date_out,
b.out,
a.date AS date_in,
a.in
FROM (SELECT item_id, date, in FROM your_table WHERE in IS NOT NULL) a
INNER JOIN (SELECT item_id, date, out FROM your_table WHERE out IS NOT NULL) b
ON b.item_id= a.item_id
答案 4 :(得分:0)
您可以使用此查询来获取所需的结果:
SELECT DISTINCT
item_id,
(SELECT max(`date`) FROM items WHERE `out` = 1 AND item_id = 1002) DATE_OUT,
MAX(`OUT`) `OUT`,
(SELECT max(`date`) FROM items WHERE `IN` = 2 AND item_id = 1002) DATE_IN,
MAX(`IN`) `IN`
FROM items
这是SQL小提琴