应用特定规则时在MySQL中合并结果

应用特定规则时在MySQL中合并结果,mysql,Mysql,我使用以下SP为每个用户获取最新的5笔交易: CREATE PROCEDURE Get5latestTrns(IN userID bigint(20)) BEGIN SELECT t.timestamp , p.name , p.payment_transaction_type_id , a.account_name , t.amount_total , e.expense_type_name

我使用以下SP为每个用户获取最新的5笔交易:

CREATE PROCEDURE Get5latestTrns(IN userID bigint(20))
BEGIN

    SELECT t.timestamp
         , p.name
         , p.payment_transaction_type_id
         , a.account_name
         , t.amount_total
         , e.expense_type_name
         , t.description 
      FROM transactions t
      JOIN accounts a
        ON t.account_id = a.account_id
      JOIN expense_types e
        ON t.expense_type_id = e.expense_type_id
      JOIN payment_transaction_types p
        ON t.payment_transaction_type_id = p.payment_transaction_type_id
     WHERE t.user_id = userID 
       AND is_cancelled = 0
     ORDER 
        BY 1 DESC 
     LIMIT 5;

END 
上述SP返回:

timestamp               name        payment_transaction_type_id account_name            amount_total        expense_type_name   description
2020-10-31  08:26:11    Deposit     13                          Τράζεπα Αποταμιευτικός  44.00               Other Incomes   
2020-10-31  08:25:28    Movement    2                           Πειραιώς                2.00                Movement    
2020-10-31  08:25:28    Movement    2                           Paypal                  2.00                Movement    
2020-10-31  08:14:59    Movement    2                           Bank B                  1.00                Movement            dokimi
2020-10-31  08:14:59    Movement    2                           Bank A                  1.00                Movement            dokimi
如您所见,如果用户执行“移动”,则是一个重复记录,唯一的区别是“帐户名称”,第一个记录是源帐户,第二个记录是目标帐户

“事务”表中的两条记录的每个移动都有一个唯一的编号

目标是: 如果在最后5笔交易中有付款交易类型id=2,则将其显示为记录,例如:

timestamp               name        payment_transaction_type_id account_name            amount_total        expense_type_name   description
2020-10-31  08:26:11    Deposit     13                          Τράζεπα Αποταμιευτικός  44.00               Other Incomes   
2020-10-31  08:25:28    Movement    2                           Paypal -> Πειραιώς      2.00                Movement    
2020-10-31  08:14:59    Movement    2                           BANK A -> BANK B        1.00                Movement            dokimi
2020-05-21  08:25:23    Deposit     13                          eurobank                49.47               Other Expenses      marina
2020-05-21  08:24:31    Expense     12                          eurobank                5.00                venzini             shell
样本数据:

-- 
-- Set character set the client will use to send SQL statements to the server
--
SET NAMES 'utf8';

--
-- Set default database
--
CREATE DATABASE if not exists SAMPLEDB
CHARACTER SET latin1
COLLATE latin1_swedish_ci;

USE SAMPLEDB;

--
-- Create table `transactions`
--
CREATE TABLE transactions (
  transaction_id bigint(20) NOT NULL AUTO_INCREMENT,
  payment_transaction_type_id int(11) NOT NULL,
  amount_total decimal(18, 2) NOT NULL,
  timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  account_id int(11) NOT NULL,
  user_id int(11) NOT NULL,
  currency_id smallint(6) DEFAULT NULL,
  session_id varchar(50) DEFAULT NULL,
  balance_real_after decimal(18, 2) NOT NULL,
  is_processed tinyint(1) NOT NULL DEFAULT 1,
  sign_mult int(11) NOT NULL DEFAULT 1,
  is_cancelled tinyint(1) NOT NULL DEFAULT 0,
  payment_method_id int(11) DEFAULT NULL,
  description varchar(255) DEFAULT NULL,
  expense_type_id int(11) DEFAULT NULL,
  move_id bigint(20) DEFAULT NULL,
  move_to tinyint(1) DEFAULT NULL,
  PRIMARY KEY (transaction_id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2306,
AVG_ROW_LENGTH = 103,
CHARACTER SET utf8,
COLLATE utf8_unicode_ci,
ROW_FORMAT = COMPACT;


--
-- Create index `currency_id` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX currency_id (currency_id);

--
-- Create index `game_id` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX game_id (account_id);

--
-- Create index `payment_transaction_type_id` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX payment_transaction_type_id (payment_transaction_type_id);

--
-- Create index `player_date` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX player_date (timestamp);

--
-- Create index `process_bets` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX process_bets (is_processed);

--
-- Create index `session_id` on table `transactions`
--
ALTER TABLE transactions
ADD INDEX session_id (session_id);


--
-- Create table `accounts`
--
CREATE TABLE accounts (
  account_id int(11) NOT NULL AUTO_INCREMENT,
  user_id int(11) UNSIGNED DEFAULT NULL,
  account_type_id int(11) DEFAULT NULL,
  account_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  account_reference varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  is_saving_account tinyint(4) DEFAULT 0,
  next_interest_deposit_date datetime DEFAULT NULL,
  interest_rate decimal(9, 5) DEFAULT NULL,
  interest_interval_id smallint(2) DEFAULT NULL,
  PRIMARY KEY (account_id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 68,
AVG_ROW_LENGTH = 496,
CHARACTER SET utf8,
COLLATE utf8_unicode_ci;

--
-- Create table `expense_types`
--
CREATE TABLE expense_types (
  expense_type_id int(11) NOT NULL AUTO_INCREMENT,
  expense_type_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  is_subexpense tinyint(4) DEFAULT NULL,
  parrent_type_id int(11) DEFAULT NULL,
  user_id int(11) DEFAULT NULL,
  is_income_category tinyint(4) DEFAULT NULL,
  PRIMARY KEY (expense_type_id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 100057,
AVG_ROW_LENGTH = 348,
CHARACTER SET utf8,
COLLATE utf8_unicode_ci;

--
-- Create table `payment_transaction_types`
--
CREATE TABLE payment_transaction_types (
  payment_transaction_type_id bigint(20) NOT NULL AUTO_INCREMENT,
  name varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  display_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  is_user_adjustment_type tinyint(1) NOT NULL DEFAULT 0,
  is_user_adjustment_type_hidden tinyint(1) DEFAULT 0,
  dissallow_set_test_player tinyint(1) NOT NULL DEFAULT 0,
  is_money tinyint(1) NOT NULL DEFAULT 0,
  is_points tinyint(1) NOT NULL DEFAULT 0,
  is_common_wallet_adjustment_type tinyint(1) NOT NULL DEFAULT 0,
  adjustment_selector char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  hide_from_player tinyint(1) NOT NULL DEFAULT 0,
  show_in_reports tinyint(1) NOT NULL DEFAULT 0,
  is_deposit_adjustment tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Added for reports',
  player_trail_type_id int(11) DEFAULT NULL,
  is_affiliate_compensation_type tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (payment_transaction_type_id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 21,
AVG_ROW_LENGTH = 2730,
CHARACTER SET utf8,
COLLATE utf8_unicode_ci,
COMMENT = 'This represents the types of transaction type';

--
-- Create index `is_deposit_adjustment` on table `payment_transaction_types`
--
ALTER TABLE payment_transaction_types
ADD INDEX is_deposit_adjustment (is_deposit_adjustment);

--
-- Create index `is_user_adjustment_type` on table `payment_transaction_types`
--
ALTER TABLE payment_transaction_types
ADD INDEX is_user_adjustment_type (is_user_adjustment_type);

--
-- Create index `name` on table `payment_transaction_types`
--
ALTER TABLE payment_transaction_types
ADD UNIQUE INDEX name (name);

--
-- Create index `player_trail_type_id` on table `payment_transaction_types`
--
ALTER TABLE payment_transaction_types
ADD INDEX player_trail_type_id (player_trail_type_id);


INSERT INTO transactions(transaction_id, payment_transaction_type_id, amount_total, timestamp, account_id, user_id, currency_id, session_id, balance_real_after, is_processed, sign_mult, is_cancelled, payment_method_id, description, expense_type_id, move_id, move_to) VALUES
(1761, 12, 1500.00, '2020-04-22 12:02:52', 20, 9, NULL, 'h6lsu44r8vk0ef71cqd6ko0s1j', 20500.00, 1, 1, 0, NULL, '55', 99999, NULL, NULL),
(1762, 12, 1.00, '2020-04-22 14:06:17', 18, 9, NULL, 'h6lsu44r8vk0ef71cqd6ko0s1j', 73.00, 1, 1, 0, NULL, '555', 2, NULL, NULL),
(1769, 2, 50.00, '2020-04-23 22:26:42', 18, 9, NULL, 'pgg4rmfh5inpij8s4ft88q4kau', 23.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1775, 12, 22.00, '2020-04-26 21:14:45', 20, 9, NULL, '9so6snnor87pc4o3jutkumsqpn', 20478.00, 1, 1, 0, NULL, '123', 9, NULL, NULL),
(1776, 12, 222.00, '2020-04-26 21:18:22', 18, 9, NULL, '9so6snnor87pc4o3jutkumsqpn', -199.00, 1, 1, 0, NULL, '222', 4, NULL, NULL),
(1777, 12, 33.00, '2020-04-26 21:44:10', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -232.00, 1, 1, 0, NULL, '33', 9, NULL, NULL),
(1778, 12, 22.00, '2020-04-26 21:48:35', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -254.00, 1, 1, 0, NULL, '22', 4, NULL, NULL),
(1782, 12, 444.00, '2020-04-26 22:21:57', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -698.00, 1, 1, 0, NULL, 'ddd', 9, NULL, NULL),
(1783, 12, 44.00, '2020-04-26 22:22:20', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -742.00, 1, 1, 0, NULL, '33', 99999, NULL, NULL),
(1784, 12, 22.00, '2020-04-26 22:23:11', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -764.00, 1, 1, 0, NULL, '2', 4, NULL, NULL),
(1785, 12, 22.00, '2020-04-26 22:38:40', 18, 9, NULL, 'lqru65pua6uoo30eqbt3b6cvn6', -786.00, 1, 1, 0, NULL, '2', 4, NULL, NULL),
(1787, 12, 5.00, '2020-04-27 16:51:35', 18, 9, NULL, '3lbrbvcom1gkc6im1ld0g9krb4', -791.00, 1, 1, 0, NULL, '5', 99999, NULL, NULL),
(1788, 12, 5.00, '2020-04-27 16:54:23', 18, 9, NULL, '3lbrbvcom1gkc6im1ld0g9krb4', -796.00, 1, 1, 0, NULL, '5', 99999, NULL, NULL),
(1795, 2, 1000.00, '2020-04-27 18:12:34', 18, 9, NULL, '3lbrbvcom1gkc6im1ld0g9krb4', 204.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1796, 2, 1000.00, '2020-04-27 18:12:34', 20, 9, NULL, '3lbrbvcom1gkc6im1ld0g9krb4', 19478.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1807, 12, 222.00, '2020-04-28 00:10:07', 18, 9, NULL, '1j5g25b9asvtksn7je7v4qtq01', -18.00, 1, 1, 0, NULL, '222', 9, NULL, NULL),
(1808, 12, 520.00, '2020-04-28 00:25:18', 18, 9, NULL, '1j5g25b9asvtksn7je7v4qtq01', -538.00, 1, 1, 0, NULL, 'test', 9, NULL, NULL),
(1809, 2, 1500.00, '2020-04-28 00:25:53', 18, 9, NULL, '1j5g25b9asvtksn7je7v4qtq01', 962.00, 1, 1, 0, NULL, '', 4, NULL, NULL),
(1810, 2, 1500.00, '2020-04-28 00:25:53', 20, 9, NULL, '1j5g25b9asvtksn7je7v4qtq01', 17978.00, 1, 1, 0, NULL, '', 4, NULL, NULL),
(1811, 2, 100.00, '2020-04-28 09:53:14', 18, 9, NULL, 'hoba1634mgp6fboue35es1l2lf', 1062.00, 1, 1, 0, NULL, 'AEK', 99999, NULL, NULL),
(1813, 12, 5.00, '2020-04-28 09:59:00', 18, 9, NULL, '6jorj37bi6m45pqnuv4s0qhgfd', 1057.00, 1, 1, 0, NULL, 'Test', 1, NULL, NULL),
(1823, 13, 1256.94, '2020-04-30 09:32:39', 24, 9, NULL, 'jctb7cs2agvr7n1s7mbdene5cv', 1256.94, 1, 1, 0, NULL, '', 9, NULL, NULL),
(1828, 12, 110.50, '2020-04-30 17:46:32', 20, 9, NULL, 'viiht3c13hi0ollatfuvtqvr52', 17317.50, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1829, 12, 125.50, '2020-04-30 17:47:02', 20, 9, NULL, 'viiht3c13hi0ollatfuvtqvr52', 17192.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1830, 12, 500.00, '2020-04-30 17:47:18', 20, 9, NULL, 'viiht3c13hi0ollatfuvtqvr52', 16692.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1839, 12, 4.00, '2020-05-01 13:05:25', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 16688.00, 1, 1, 0, NULL, '', 9, NULL, NULL),
(1840, 13, 6.00, '2020-05-01 13:05:41', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 16694.00, 1, 1, 0, NULL, '', 7, NULL, NULL),
(1846, 12, 200.00, '2020-05-01 20:03:25', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 16494.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1849, 12, 1500.00, '2020-05-02 15:22:01', 20, 9, NULL, 'vml86inbeqmrjq2d71ir8t4h6q', 14994.00, 1, 1, 0, NULL, 'hjbiyhbnhi', 5, NULL, NULL),
(1850, 12, 1.00, '2020-05-02 17:30:15', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14993.00, 1, 1, 0, NULL, '1', 99999, NULL, NULL),
(1851, 12, 1.00, '2020-05-02 17:30:58', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14992.00, 1, 1, 0, NULL, '1', 99999, NULL, NULL),
(1852, 12, 1.00, '2020-05-02 17:34:44', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14991.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1853, 12, 1.00, '2020-05-02 17:35:14', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14990.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1854, 12, 1.00, '2020-05-02 17:37:57', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14989.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1855, 12, 1.00, '2020-05-02 17:45:59', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14988.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1856, 12, 1.00, '2020-05-02 17:54:23', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14987.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1857, 12, 1.00, '2020-05-02 17:55:54', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14986.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1858, 12, 1.00, '2020-05-02 17:57:27', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14985.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1859, 12, 1.00, '2020-05-02 17:59:58', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14984.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1860, 12, 1.00, '2020-05-02 18:01:15', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14983.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1861, 12, 1.00, '2020-05-02 18:03:51', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14982.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1862, 12, 1.00, '2020-05-02 18:04:23', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14981.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1863, 12, 1.00, '2020-05-02 18:05:03', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14980.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1864, 12, 1.00, '2020-05-02 18:06:57', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14979.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1865, 12, 1.00, '2020-05-02 18:07:22', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14978.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1866, 12, 1.00, '2020-05-02 18:08:39', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14977.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1867, 12, 1.00, '2020-05-02 18:10:43', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14976.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1868, 12, 1.00, '2020-05-02 18:11:28', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14975.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1869, 12, 1.00, '2020-05-02 18:11:49', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14974.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1870, 12, 1.00, '2020-05-02 18:13:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14973.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1871, 12, 1.00, '2020-05-02 18:14:30', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14972.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1872, 12, 1.00, '2020-05-02 18:15:43', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14971.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1873, 12, 1.00, '2020-05-02 18:16:07', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14970.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1874, 12, 1.00, '2020-05-02 18:16:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14969.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1875, 12, 1.00, '2020-05-02 18:17:35', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14968.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1876, 12, 1.00, '2020-05-02 18:18:58', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14967.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1877, 12, 1.00, '2020-05-02 18:20:25', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14966.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1878, 12, 1.00, '2020-05-02 18:23:52', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14965.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1879, 12, 1.00, '2020-05-02 18:24:00', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14964.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1880, 12, 1.00, '2020-05-02 18:27:51', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14963.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1881, 12, 1.00, '2020-05-02 18:30:19', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14962.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1882, 12, 1.00, '2020-05-02 18:32:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14961.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1883, 12, 1.00, '2020-05-02 18:33:58', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14960.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1884, 12, 1.00, '2020-05-02 18:40:21', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14959.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1885, 12, 1.00, '2020-05-02 18:40:31', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14958.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1886, 12, 1.00, '2020-05-02 18:41:00', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14957.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1887, 12, 1.00, '2020-05-02 18:43:53', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14956.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1888, 12, 1.00, '2020-05-02 18:46:13', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14955.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1889, 12, 1.00, '2020-05-02 18:46:57', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14954.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1890, 12, 1.00, '2020-05-02 18:47:09', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14953.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1891, 12, 1.00, '2020-05-02 18:47:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14952.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1892, 12, 1.00, '2020-05-02 18:47:57', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14951.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1893, 12, 1.00, '2020-05-02 18:48:10', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14950.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1894, 12, 1.00, '2020-05-02 18:48:34', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14949.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1895, 12, 1.00, '2020-05-02 18:48:55', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14948.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1896, 12, 1.00, '2020-05-02 18:49:11', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14947.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1897, 12, 1.00, '2020-05-02 18:49:41', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14946.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1898, 12, 1.00, '2020-05-02 18:49:56', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14945.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1899, 12, 1.00, '2020-05-02 18:50:13', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14944.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1900, 12, 1.00, '2020-05-02 18:51:23', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14943.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1901, 12, 1.00, '2020-05-02 18:51:44', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14942.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1902, 12, 1.00, '2020-05-02 18:52:25', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14941.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1903, 12, 1.00, '2020-05-02 18:53:09', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14940.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1904, 12, 1.00, '2020-05-02 18:53:45', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14939.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1905, 12, 1.00, '2020-05-02 18:54:00', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14938.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1906, 12, 1.00, '2020-05-02 18:54:29', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14937.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1907, 12, 1.00, '2020-05-02 18:56:42', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14936.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1908, 12, 1.00, '2020-05-02 18:57:17', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14935.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1909, 12, 1.00, '2020-05-02 18:57:52', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14934.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1910, 12, 1.00, '2020-05-02 18:58:43', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14933.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1911, 12, 1.00, '2020-05-02 18:58:49', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14932.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1912, 12, 1.00, '2020-05-02 18:59:21', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14931.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1913, 12, 1.00, '2020-05-02 18:59:44', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14930.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1914, 12, 1.00, '2020-05-02 18:59:57', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14929.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1915, 12, 1.00, '2020-05-02 19:00:27', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14928.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1916, 12, 1.00, '2020-05-02 19:01:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14927.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1917, 12, 1.00, '2020-05-02 19:03:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14926.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1918, 12, 1.00, '2020-05-02 19:03:59', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14925.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1919, 12, 98.00, '2020-05-02 19:04:29', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14827.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1920, 12, 1.00, '2020-05-02 19:52:34', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14826.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1921, 12, 1.00, '2020-05-02 20:05:09', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14825.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1922, 12, 1.00, '2020-05-02 20:05:19', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14824.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1923, 12, 1.00, '2020-05-02 20:40:40', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14823.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1924, 12, 151.00, '2020-05-02 20:43:21', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14672.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1925, 13, 1.00, '2020-05-02 20:46:29', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 14673.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1926, 12, 4673.00, '2020-05-02 20:46:43', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 10000.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1927, 2, 2000.00, '2020-05-02 20:47:05', 22, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 2000.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1928, 2, 2000.00, '2020-05-02 20:47:05', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 8000.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1929, 2, 1.00, '2020-05-02 20:47:50', 22, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 2001.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1930, 2, 1.00, '2020-05-02 20:47:50', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 7999.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1931, 2, 1000.00, '2020-05-02 20:48:13', 22, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 3001.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1932, 2, 1000.00, '2020-05-02 20:48:13', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 6999.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1934, 12, 4.00, '2020-05-02 21:29:54', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 6995.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1935, 12, 5.00, '2020-05-02 21:30:31', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 6990.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1936, 12, 222.00, '2020-05-02 21:55:37', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 6768.00, 1, 1, 0, NULL, '', 2, NULL, NULL),
(1937, 12, 2222.00, '2020-05-02 21:56:03', 20, 9, NULL, '2q00as2tk8coasj15r6sts6prl', 4546.00, 1, 1, 0, NULL, '', 9, NULL, NULL),
(1939, 12, 5.00, '2020-05-03 01:03:55', 20, 9, NULL, 'scudc458dfqe3ejaq49is24a66', 4541.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(1940, 12, 120.00, '2020-05-03 11:26:28', 22, 9, NULL, 'i8n9kgo227ti6pq3tdifp20clk', 2881.00, 1, 1, 0, NULL, '', 100014, NULL, NULL),
(1941, 1, 0.00, '2020-05-03 11:41:16', 29, 9, NULL, '', 0.00, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1942, 13, 1000.00, '2020-05-03 11:42:27', 29, 9, NULL, 'i8n9kgo227ti6pq3tdifp20clk', 1000.00, 1, 1, 0, NULL, '', 100015, NULL, NULL),
(1947, 1, 0.00, '2020-05-03 15:18:32', 33, 9, NULL, '', 0.00, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1948, 1, 55.00, '2020-05-03 15:32:56', 34, 9, NULL, '', 55.00, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1950, 1, 25.22, '2020-05-03 15:43:34', 35, 9, NULL, '', 25.22, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1952, 1, 888.88, '2020-05-03 16:00:07', 37, 9, NULL, '3tfdcq9badcsjia95do57hvjc5', 888.88, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1953, 1, 0.00, '2020-05-03 16:01:05', 38, 9, NULL, '3tfdcq9badcsjia95do57hvjc5', 0.00, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(1990, 1, 1266.00, '2020-05-08 23:40:51', 52, 9, NULL, 'dkg2t9nrcam9ksmb4b7ks6i80g', 1266.00, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(2032, 12, 11.00, '2020-05-18 08:23:05', 20, 9, NULL, 'ptbafjnjquk1p6tvcbrlegdob6', 4530.00, 1, 1, 0, NULL, '', 99999, NULL, NULL),
(2041, 1, 10.53, '2020-05-21 08:23:46', 63, 9, NULL, 'ifb0vr2c21b6e0vvje968ckkd2', 10.53, 1, 1, 0, NULL, 'New account', 99, NULL, NULL),
(2042, 12, 5.00, '2020-05-21 08:24:31', 63, 9, NULL, 'ifb0vr2c21b6e0vvje968ckkd2', 5.53, 1, 1, 0, NULL, 'shell', 100047, NULL, NULL),
(2043, 13, 49.47, '2020-05-21 08:25:23', 63, 9, NULL, 'ifb0vr2c21b6e0vvje968ckkd2', 55.00, 1, 1, 0, NULL, 'marina', 99999, NULL, NULL),
(2301, 2, 1.00, '2020-10-31 08:14:59', 20, 9, NULL, 'kdcdhs1jvcfi20ejdcrkacmhpo', 4529.00, 1, 1, 0, NULL, 'dokimi', 99997, 1604132099, 0),
(2302, 2, 1.00, '2020-10-31 08:14:59', 22, 9, NULL, 'kdcdhs1jvcfi20ejdcrkacmhpo', 2882.00, 1, 1, 0, NULL, 'dokimi', 99997, 1604132099, 1),
(2303, 2, 2.00, '2020-10-31 08:25:28', 23, 9, NULL, 'kdcdhs1jvcfi20ejdcrkacmhpo', -2.00, 1, 1, 0, NULL, '', 99997, 1604132729, 0),
(2304, 2, 2.00, '2020-10-31 08:25:28', 24, 9, NULL, 'kdcdhs1jvcfi20ejdcrkacmhpo', 1258.94, 1, 1, 0, NULL, '', 99997, 1604132729, 1),
(2305, 13, 44.00, '2020-10-31 08:26:11', 20, 9, NULL, 'kdcdhs1jvcfi20ejdcrkacmhpo', 4573.00, 1, 1, 0, NULL, '', 99998, NULL, NULL);

INSERT INTO accounts(account_id, user_id, account_type_id, account_name, account_reference, is_saving_account, next_interest_deposit_date, interest_rate, interest_interval_id) VALUES
(20, 9, 1, 'Τράζεπα Αποταμιευτικός', 'GR111111111111111111111', 1, NULL, NULL, NULL),
(22, 9, 1, 'Τράπεζα Πειραιώς', 'GR28727028390283029822', 0, NULL, NULL, NULL),
(23, 9, 2, 'Paypal', 'GR98374829732837829732', 0, NULL, NULL, NULL),
(24, 9, 1, 'Πειραιώς', 'GR923474829732837829732', 1, NULL, NULL, NULL),
(29, 9, 4, 'Μετρητα', '', 0, NULL, NULL, NULL),
(33, 9, 1, 'new acc', 'gr77777', 1, NULL, NULL, NULL),
(35, 9, 1, 'accwithbalance', 'gr77368736873673637687687', 0, NULL, NULL, NULL),
(37, 9, 1, 'Alpha2', 'GR892738279387298732', 0, NULL, NULL, NULL),
(38, 9, 1, 'testbbb', '', 0, NULL, NULL, NULL),
(52, 9, 1, 'Τεστ22', '', 1, NULL, NULL, NULL),
(63, 9, 1, 'eurobank', 'R7868s7989sp', 0, NULL, NULL, NULL);

INSERT INTO expense_types(expense_type_id, expense_type_name, is_subexpense, parrent_type_id, user_id, is_income_category) VALUES
(100014, 'Super Market', NULL, NULL, 9, 0),
(100015, 'Ενοικια', NULL, NULL, 9, 1),
(100016, 'Επιδομα', NULL, NULL, 9, 1),
(100047, 'venzini', NULL, NULL, 9, 0),
(99997, 'Movement', NULL, NULL, NULL, NULL),
(99998, 'Other Incomes', NULL, NULL, NULL, 1),
(99999, 'Other Expenses', NULL, NULL, NULL, 0);

INSERT INTO payment_transaction_types(payment_transaction_type_id, name, display_name, is_user_adjustment_type, is_user_adjustment_type_hidden, dissallow_set_test_player, is_money, is_points, is_common_wallet_adjustment_type, adjustment_selector, hide_from_player, show_in_reports, is_deposit_adjustment, player_trail_type_id, is_affiliate_compensation_type) VALUES
(1, 'InitialBalance', 'Initial Balance', 0, 0, 1, 1, 0, 0, '', 0, 0, 0, 2, 0),
(2, 'Movement', 'Movement', 0, 0, 1, 1, 0, 0, 'B', 0, 0, 0, 2, 0),
(7, 'Adjustment', 'Adjustment', 1, 0, 0, 1, 0, 0, 'B', 0, 0, 0, 3, 1),
(12, 'Expense', 'Expense Action', 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1, 0),
(13, 'Deposit', 'Deposit Action', 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1, 0),
(14, 'Savings', 'Saving Action', 0, 0, 0, 0, 0, 1, '', 0, 0, 0, 1, 0),
(20, 'Cancel', 'Cancel Action', 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1, 0);


DELIMITER $$

--
-- Create procedure `Get5latestTrns`
--
CREATE PROCEDURE Get5latestTrns (IN userID bigint(20))
BEGIN

  SELECT
    transactions.timestamp,
    payment_transaction_types.name,
    payment_transaction_types.payment_transaction_type_id,
    accounts.account_name,
    transactions.amount_total,
    expense_types.expense_type_name,
    transactions.description
  FROM transactions
    JOIN accounts
      ON transactions.account_id = accounts.account_id
    JOIN expense_types
      ON transactions.expense_type_id = expense_types.expense_type_id
    JOIN payment_transaction_types
      ON transactions.payment_transaction_type_id = payment_transaction_types.payment_transaction_type_id
  WHERE transactions.user_id = userID
  AND is_cancelled = 0
  ORDER BY 1 DESC LIMIT 5;

END
$$

DELIMITER ;

SP Call:
Call Get5latestTrns(9)

如果交易的时间戳仅对付款交易类型id=2重复,则可以按时间戳分组并使用聚合:

SELECT
    t.timestamp,
    MAX(ptt.name) name,
    MAX(ptt.payment_transaction_type_id) payment_transaction_type_id,
    GROUP_CONCAT(a.account_name ORDER BY t.move_to SEPARATOR ' -> ') account_name,
    MAX(t.amount_total) amount_total,
    MAX(et.expense_type_name) expense_type_name,
    MAX(t.description) description
FROM transactions t 
JOIN accounts a ON t.account_id = a.account_id
JOIN expense_types et ON t.expense_type_id = et.expense_type_id
JOIN payment_transaction_types ptt ON t.payment_transaction_type_id = ptt.payment_transaction_type_id
WHERE t.user_id = 9 AND t.is_cancelled = 0
GROUP BY t.timestamp
ORDER BY t.timestamp DESC LIMIT 5;
请参阅。
结果:


这些动作总是成对出现,时间戳相同吗?还有一列表示每对事务的顺序。仅仅因为你看到了第一银行B和第二银行A,这并没有订购它们。其他类型的事务是否也有相同的时间戳?@forpas,在事务表中有两个额外的列(move_id&move_to)。移动id对于每个移动的两个事务都是通用的。move_to是一个布尔值,源帐户为0,目标帐户为1。所以不需要使用时间戳。
> timestamp           | name     | payment_transaction_type_id | account_name                               | amount_total | expense_type_name | description
> :------------------ | :------- | --------------------------: | :----------------------------------------- | -----------: | :---------------- | :----------
> 2020-10-31 08:26:11 | Deposit  |                          13 | Τράζεπα Αποταμιευτικός                     |        44.00 | Other Incomes     |            
> 2020-10-31 08:25:28 | Movement |                           2 | Paypal -> Πειραιώς                         |         2.00 | Movement          |            
> 2020-10-31 08:14:59 | Movement |                           2 | Τράζεπα Αποταμιευτικός -> Τράπεζα Πειραιώς |         1.00 | Movement          | dokimi     
> 2020-05-21 08:25:23 | Deposit  |                          13 | eurobank                                   |        49.47 | Other Expenses    | marina     
> 2020-05-21 08:24:31 | Expense  |                          12 | eurobank                                   |         5.00 | venzini           | shell