MYSQL在多行的单个记录中显示值

时间:2019-03-20 07:51:13

标签: php mysql

首先,这是我第一次在这里发布问题。如果已经提出并回答了我的问题,请给我提供该问题的链接,因为即使我也不知道如何正确地提出这个问题。

所以我有一个带有这样记录的表。

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:我添加了更多数据集,以进一步阐明我要实现的目标。

非常感谢一直在帮助我的人。

5 个答案:

答案 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小提琴

SQL Query