Real time data visualization using R and data extracting from MySQL Server

I have the following link which shows an example for "Real-time data visualization using R and data extracting from SQL Server:
[https://tomaztsql.wordpress.com/2018/07/23/real-time-data-visualization-using-r-and-data-extracting-from-sql-server/]

I have tried to replicate this for MySQL Server with no success. Can anyone assist with this.

Regards.

Chris

1 Like

Could you be a little more specific? What is the problem you are facing?

Many thanks for your prompt response. I am looking at having my Shiny app plots refreshed with new data as it comes into MySQL Server

This can be done with the reactivePoll() function, take a look at the documentation.

https://shiny.rstudio.com/reference/shiny/latest/reactivePoll.html

Many thanks Andre

I have tried the following with ReactivePoll:

# libraries ----
library(shiny)
library(arules)
#> Loading required package: Matrix
#> 
#> Attaching package: 'arules'
#> The following objects are masked from 'package:base':
#> 
#>     abbreviate, write
library(arulesViz)
#> Loading required package: grid
#> Registered S3 methods overwritten by 'ggplot2':
#>   method         from 
#>   [.quosures     rlang
#>   c.quosures     rlang
#>   print.quosures rlang
#> Registered S3 method overwritten by 'seriation':
#>   method         from 
#>   reorder.hclust gclus
library(tidyverse)
#> Registered S3 method overwritten by 'rvest':
#>   method            from
#>   read_xml.response xml2
library(knitr)
library(gridExtra)
#> 
#> Attaching package: 'gridExtra'
#> The following object is masked from 'package:dplyr':
#> 
#>     combine
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date
library(colorspace)
library(RColorBrewer)
library(DT)
#> 
#> Attaching package: 'DT'
#> The following objects are masked from 'package:shiny':
#> 
#>     dataTableOutput, renderDataTable
library(RMySQL)
#> Loading required package: DBI
library(DBI)
library(ggplot2)
library(plyr)
#> -------------------------------------------------------------------------
#> You have loaded plyr after dplyr - this is likely to cause problems.
#> If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
#> library(plyr); library(dplyr)
#> -------------------------------------------------------------------------
#> 
#> Attaching package: 'plyr'
#> The following object is masked from 'package:lubridate':
#> 
#>     here
#> The following objects are masked from 'package:dplyr':
#> 
#>     arrange, count, desc, failwith, id, mutate, rename, summarise,
#>     summarize
#> The following object is masked from 'package:purrr':
#> 
#>     compact
library(pool)
library(shinyjs)
#> 
#> Attaching package: 'shinyjs'
#> The following object is masked from 'package:pool':
#> 
#>     show
#> The following object is masked from 'package:RMySQL':
#> 
#>     show
#> The following object is masked from 'package:DBI':
#> 
#>     show
#> The following object is masked from 'package:colorspace':
#> 
#>     show
#> The following object is masked from 'package:lubridate':
#> 
#>     show
#> The following objects are masked from 'package:arules':
#> 
#>     info, show
#> The following object is masked from 'package:Matrix':
#> 
#>     show
#> The following object is masked from 'package:shiny':
#> 
#>     runExample
#> The following objects are masked from 'package:methods':
#> 
#>     removeClass, show
library(gridExtra)
library(glue)
#> 
#> Attaching package: 'glue'
#> The following object is masked from 'package:dplyr':
#> 
#>     collapse
library(cowplot)
#> 
#> Attaching package: 'cowplot'
#> The following object is masked from 'package:ggplot2':
#> 
#>     ggsave
library(viridis)
#> Loading required package: viridisLite
library(ggridges)
#> 
#> Attaching package: 'ggridges'
#> The following object is masked from 'package:ggplot2':
#> 
#>     scale_discrete_manual
library(ggthemes)
#> 
#> Attaching package: 'ggthemes'
#> The following object is masked from 'package:cowplot':
#> 
#>     theme_map
library(tibble)
library(Rcpp)
library(shinycssloaders)
library(scales)
#> 
#> Attaching package: 'scales'
#> The following object is masked from 'package:viridis':
#> 
#>     viridis_pal
#> The following object is masked from 'package:purrr':
#> 
#>     discard
#> The following object is masked from 'package:readr':
#> 
#>     col_factor
library(visNetwork)
library(htmlwidgets)
library(plotly)
#> 
#> Attaching package: 'plotly'
#> The following objects are masked from 'package:plyr':
#> 
#>     arrange, mutate, rename, summarise
#> The following object is masked from 'package:ggplot2':
#> 
#>     last_plot
#> The following object is masked from 'package:stats':
#> 
#>     filter
#> The following object is masked from 'package:graphics':
#> 
#>     layout

jscode <- "shinyjs.closeWindow = function() { window.close(); }"

# Define UI for application 
ui <- navbarPage(title = "Online Retail Transactions Insights & Market Basket Analysis",
                 
                 # uncomment below line for adding logo:
                 # list(HTML('<div><img src="logo.jpg" height = 50px style=""></div>')),
                  
                 tabPanel("Results",
                          icon = icon("chart-bar"),
                          sidebarLayout(
                            sidebarPanel(
                              condition = "input.mytab %in%' c('graph',Table ,'datatable', 'itemFreq','monthTrans','weekTrans','hourTrans','itemComb',
                              'itemSingle','itemsPerhr', itemsPerday','itemsPerWeekday','transDensity','salesSum','salesWeek','hourlyCustomer','dailyCustomer', 'monthlyCustomer','ItemTransHr','ItemTransWk','ItemTransMonth','bubbleChart',salesTable')",
                              
                              # conditionalPanel(
                              # condition = "input.mytab %in%' c('monthTrans','weekTrans', 'hourTans')",
                              # htmlOutput("rangeDate_selector"),
                              # ),
                              
                              htmlOutput("rangeDate_selector"),
                              
                              htmlOutput("productName_selector"),
                              
                              # htmlOutput("branchName_selector"),
                              
                              radioButtons('samp', label='Sample', choices=c('All Rules', 'Sample'), inline=T), br(),
                              
                              
                              conditionalPanel(
                                condition = "input.samp=='Sample'",
                                numericInput("nrule", 'Number of Rules', 10), br()),
                              
                              conditionalPanel(
                                condition = "input.mytab=='graph'",
                                radioButtons('graphType', label='Graph Type', choices=c('itemsets','items'), inline=T), br()),
                              
                              #
                              conditionalPanel(
                                condition = "input.mytab=='itemFreq'",
                                numericInput("topN", 'Number of Top Frequent Items', 10), br()),
                              
                              #
                              
                              conditionalPanel(
                                condition = "input.mytab=='grouped'",
                                sliderInput('k', label='Choose # of rule clusters', min=1, max=150, step=1, value=15), br()),
                              
                              conditionalPanel( 
                                condition = "input.mytab=='table'",
                                sliderInput("supp", "Support", min = 0,max = 1, value = 0.002, step = 1/10000), br(),
                                sliderInput("conf", "Confidence", min = 0, max =  1, value = 0.8, step = 1/10000), br(),
                                selectInput("sort", "Sorting Criteria:", choices = c('lift','confidence', 'support')), br(),
                                numericInput("minL","Min items per set",2), br(),
                                numericInput("maxL", "Max items per set", 4), br()),
                              
                              # Action button
                              actionButton("goPlot", "Go Plot!",width = NULL),
                              
                              # Close shop:
                              #   column(5,
                              #   div(title='Exit this Shiny plotting app? (The plots will NOT be automatically saved!)',
                              #     actionButton(inputId="close_shop", label=strong("Exit..."), icon=icon("remove-circle", lib="glyphicon"), style="color: #C70039 ; border-color: #C70039"))
                              # ),
                              
                              #
                              extendShinyjs(text = jscode, functions = c("closeWindow")),
                              actionButton("close", "Close window"),
                              #
                              
                              # HTML("<button type='button'>Toggle Fullscreen</button>"),
                              onclick = "shinyjs.toggleFullScreen();"

                            ),
                            
                            # Show all plots
                            mainPanel(
                              
                              tabsetPanel(id='mytab',
                                          # tabPanel('Grouped', value='grouped', plotOutput("groupedPlot", width='100%', height='100%')),
                                          tabPanel('Graph', value='graph', plotOutput("graphPlot", width='100%', height='100%')),
                                          # tabPanel('Scatter', value='scatter', plotOutput("scatterPlot", width='100%', height='100%')),
                                          # tabPanel('Parallel Coordinates', value='paracoord', plotOutput("paracoordPlot", width='100%', height='100%')),
                                          # tabPanel('Matrix', value='matrix', plotOutput("matrixPlot", width='100%', height='100%')),
                                          # tabPanel('ItemFreq', value='itemFreq', plotOutput("itemFreqPlot", width='100%', height='100%')),
                                          tabPanel('Table', value='table', verbatimTextOutput("rulesTable")),
                                          tabPanel('Data Table', value='datatable', dataTableOutput("rulesDataTable")),
                                          tabPanel('Monthly Transacts',value = 'monthTrans', plotOutput("TransMonthPlot", width = '100%', height = '100%')),
                                          tabPanel('Hourly Transacts',value = 'hourTrans', plotOutput("TransHourPlot", width = '100%', height = '100%')),
                                          tabPanel('Daily Transacts',value = 'weekTrans', plotOutput("TransWeekPlot", width = '100%', height = '100%')),
                                          # tabPanel('Combination Items',value = 'itemComb', plotOutput("ItemCombPlot", width = '100%', height = '100%')),
                                          # tabPanel('Single Items',value = 'itemSingle', plotOutput("ItemSinglelot", width = '100%', height = '100%')),
                                          tabPanel('Line items Summary',value = 'itemsPerday', plotOutput("ItemsPerDay", width = '100%', height = '100%')),
                                          # tabPanel('Line items sold/hr',value = 'itemsPerhr', plotOutput("ItemsPerHour", width = '100%', height = '100%')),
                                          # tabPanel('Total line items sold/day',value = 'itemsPerWeekday', plotOutput("ItemsPerWeekday", width = '100%', height = '100%')),
                                          tabPanel('Transacts Density/hr by day',value = 'transDensity', plotOutput("TransDensityPerHour", width = '100%', height = '100%')),
                                          tabPanel('$Sales Summary',value = 'salesSum', plotOutput("salesvaluePlot", width = '100%', height = '100%')),
                                          # tabPanel('Daily $Sales Summary',value = 'salesWeek', plotOutput("salesPerWeekday", width = '100%', height = '100%')),
                                          # tabPanel('Hourly Customer Summary',value = 'hourlyCustomer', plotOutput("hourlyCustomerPlot", width = '100%', height = '100%')),
                                          tabPanel('Customer Summary',value = 'monthlyCustomer', plotOutput("monthlyCustomerPlot", width = '100%', height = '100%')),
                                          # tabPanel('Bubble Chart',value = 'bubbleChart', plotlyOutput("bubbleChart", width = '100%', height = '100%')),
                                          # tabPanel('Daily Customer Summary',value = 'dailyCustomer', plotOutput("dailyCustomerPlot", width = '100%', height = '100%')),
                                          # tabPanel('Items/transact/hr',value = 'ItemTransHr', plotOutput("transItemHour", width = '100%', height = '100%')),
                                          # tabPanel('Items/transact/day',value = 'ItemTransWk', plotOutput("transItemWeekday", width = '100%', height = '100%')),
                                          # tabPanel('Items/transact/month',value = 'ItemTransMonth', plotOutput("transItemMonth", width = '100%', height = '100%')),
                                          tabPanel('Item Sales Summary',value = 'salesTable', dataTableOutput("salesDataTable"))
                                          
                                          
                                          
                              )
                            )
                          ))
)

# Define server logic required for the application
server <- function(input, output, session) {

  # Reactive data base
  MBA_Online <- reactivePoll(3000, session,
                             checkFunc = function() {
                              con <- dbConnect(MySQL(),
                                               user = "root",
                                               password = "ruvimboML55AMG",
                                               host = "localhost",
                                               dbname = "healthcare_mining")
                                               
                               # get max date from database view to determine if data has been updated
                              max_date <- dbGetQuery(con, "SELECT MAX(cu_date) AS max_cu_date
                                                     FROM viewMaxCreatedUpdatedDates")
                             
                               # disconnet from RDS
                              dbDisconnect(con)
                              return(max_date)
                             },
                             
                             valueFunc = function() {
                               con <- dbConnect(MySQL(),
                                                user = "root",
                                                password = "ruvimboML55AMG",
                                                host = "localhost",
                                                dbname = "healthcare_mining")
                               
                               # construct the SQL statement
                               sql <- "SELECT Transaction,Item, Date, Quantity, CustomerID, Amount FROM onlineRetail;"
                             
                               MBA_Online <- dbGetQuery(con, sql)
                               
                               # disconnect
                               dbDisconnect(con)
                               
                               return(MBA_Online)
                               
                               #Remove negative amount values
                               MBA_Online <- MBA_Online %>%
                                 filter(Amount > 0)
                               
                               # create a directory called data, if not exists
                               if(!dir.exists("data")){dir.create("data")}
                               
                               # write data frame as CSV
                               write.csv(MBA_Online, "data/MBA_Online.csv")
                               ##
                               # write.csv(MBA_Online, paste0("data/MBA_OnlineTime",gsub("[^0-9]","",Sys.time()),".csv"))
                               
                               # convert Transaction into numeric, and then arrange by Transaction ID
                               MBA_Online <- MBA_Online %>% mutate(Transaction = as.double(Transaction)) %>% arrange(Transaction)
                               
                               # The next step is to actually convert the dataframe into basket format, based on the Transaction and Date of transaction
                               MBA_Online_itemList <- ddply(MBA_Online, c("Transaction","Date"), 
                                                            function(df1)paste(df1$Item, 
                                                                               collapse = ","))
                               
                               # Once we have the transactions, we no longer need the date and member numbers in our analysis. De-select Transaction and Date
                               # then rename thee imported column
                               # then write as CSV
                               MBA_Online_itemList <- MBA_Online_itemList %>%
                               select(-Transaction, -Date)
                               MBA_Online_itemList$Quantity <- NULL
                               MBA_Online_itemList$CustomerID <- NULL
                               MBA_Online_itemList$Amount <- NULL
                               
                               colnames(MBA_Online_itemList) <- c("itemList")
                               
                               MBA_Online_itemList  %>% write.csv("data/MBA_OnlineItemList.csv", quote = FALSE,row.names = FALSE)
    
  })
    
}

# Run the application 
shinyApp(ui = ui, server = server)

Shiny applications not supported in static R Markdown documents

Created on 2019-06-20 by the reprex package (v0.2.1)

I have the two tables below. I am expecting two files to be written to csv file format but i cannot not see anything. The checkFunc is a function that checks if a value has changed (e.g. checks a time stamp to see if a database has been updated) and the valueFunc is used to get the new data if the value returned by checkFunc has indeed changed. This is checked in a table view in the database which keeps tracks of changes in the table date_created and date_updated

The viewMaxCreatedUpdatedDates is as follows:

cu_date
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0
2019-06-19 22:25:09.0

The above is a table view created from the onlineRetail table and is updated as new data comes into the main table.

The onlineRetail data is as follows:

536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 1/12/2010 08:26 2.550 17850 United Kingdom 15.3 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 71053 WHITE METAL LANTERN 6 1/12/2010 08:26 3.390 17850 United Kingdom 20.34 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 84406B CREAM CUPID HEARTS COAT HANGER 8 1/12/2010 08:26 2.750 17850 United Kingdom 22 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 1/12/2010 08:26 3.390 17850 United Kingdom 20.34 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 1/12/2010 08:26 3.390 17850 United Kingdom 20.34 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 22752 SET 7 BABUSHKA NESTING BOXES 2 1/12/2010 08:26 7.650 17850 United Kingdom 15.3 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536365 21730 GLASS STAR FROSTED T-LIGHT HOLDER 6 1/12/2010 08:26 4.250 17850 United Kingdom 25.5 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536366 22633 HAND WARMER UNION JACK 6 1/12/2010 08:28 1.850 17850 United Kingdom 11.1 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536366 22632 HAND WARMER RED POLKA DOT 6 1/12/2010 08:28 1.850 17850 United Kingdom 11.1 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 84879 ASSORTED COLOUR BIRD ORNAMENT 32 1/12/2010 08:34 1.690 13047 United Kingdom 54.08 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22745 POPPY'S PLAYHOUSE BEDROOM 6 1/12/2010 08:34 2.100 13047 United Kingdom 12.6 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22748 POPPY'S PLAYHOUSE KITCHEN 6 1/12/2010 08:34 2.100 13047 United Kingdom 12.6 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22749 FELTCRAFT PRINCESS CHARLOTTE DOLL 8 1/12/2010 08:34 3.750 13047 United Kingdom 30 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22310 IVORY KNITTED MUG COSY 6 1/12/2010 08:34 1.650 13047 United Kingdom 9.9 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 84969 BOX OF 6 ASSORTED COLOUR TEASPOONS 6 1/12/2010 08:34 4.250 13047 United Kingdom 25.5 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22623 BOX OF VINTAGE JIGSAW BLOCKS 3 1/12/2010 08:34 4.950 13047 United Kingdom 14.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 22622 BOX OF VINTAGE ALPHABET BLOCKS 2 1/12/2010 08:34 9.950 13047 United Kingdom 19.9 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 21754 HOME BUILDING BLOCK WORD 3 1/12/2010 08:34 5.950 13047 United Kingdom 17.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 21755 LOVE BUILDING BLOCK WORD 3 1/12/2010 08:34 5.950 13047 United Kingdom 17.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 21777 RECIPE BOX WITH METAL HEART 4 1/12/2010 08:34 7.950 13047 United Kingdom 31.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536367 48187 DOORMAT NEW ENGLAND 4 1/12/2010 08:34 7.950 13047 United Kingdom 31.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536368 22960 JAM MAKING SET WITH JARS 6 1/12/2010 08:34 4.250 13047 United Kingdom 25.5 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536368 22913 RED COAT RACK PARIS FASHION 3 1/12/2010 08:34 4.950 13047 United Kingdom 14.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536368 22912 YELLOW COAT RACK PARIS FASHION 3 1/12/2010 08:34 4.950 13047 United Kingdom 14.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536368 22914 BLUE COAT RACK PARIS FASHION 3 1/12/2010 08:34 4.950 13047 United Kingdom 14.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536369 21756 BATH BUILDING BLOCK WORD 3 1/12/2010 08:35 5.950 13047 United Kingdom 17.85 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22728 ALARM CLOCK BAKELIKE PINK 24 1/12/2010 08:45 3.750 12583 France 90 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22727 ALARM CLOCK BAKELIKE RED 24 1/12/2010 08:45 3.750 12583 France 90 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22726 ALARM CLOCK BAKELIKE GREEN 12 1/12/2010 08:45 3.750 12583 France 45 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21724 PANDA AND BUNNIES STICKER SHEET 12 1/12/2010 08:45 0.850 12583 France 10.2 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21883 STARS GIFT TAPE 24 1/12/2010 08:45 0.650 12583 France 15.6 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 10002 INFLATABLE POLITICAL GLOBE 48 1/12/2010 08:45 0.850 12583 France 40.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21791 VINTAGE HEADS AND TAILS CARD GAME 24 1/12/2010 08:45 1.250 12583 France 30 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21035 SET/2 RED RETROSPOT TEA TOWELS 18 1/12/2010 08:45 2.950 12583 France 53.1 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22326 ROUND SNACK BOXES SET OF4 WOODLAND 24 1/12/2010 08:45 2.950 12583 France 70.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22629 SPACEBOY LUNCH BOX 24 1/12/2010 08:45 1.950 12583 France 46.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22659 LUNCH BOX I LOVE LONDON 24 1/12/2010 08:45 1.950 12583 France 46.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22631 CIRCUS PARADE LUNCH BOX 24 1/12/2010 08:45 1.950 12583 France 46.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22661 CHARLOTTE BAG DOLLY GIRL DESIGN 20 1/12/2010 08:45 0.850 12583 France 17 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21731 RED TOADSTOOL LED NIGHT LIGHT 24 1/12/2010 08:45 1.650 12583 France 39.6 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22900 SET 2 TEA TOWELS I LOVE LONDON 24 1/12/2010 08:45 2.950 12583 France 70.8 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 21913 VINTAGE SEASIDE JIGSAW PUZZLES 12 1/12/2010 08:45 3.750 12583 France 45 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22540 MINI JIGSAW CIRCUS PARADE 24 1/12/2010 08:45 0.420 12583 France 10.08 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22544 MINI JIGSAW SPACEBOY 24 1/12/2010 08:45 0.420 12583 France 10.08 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 22492 MINI PAINT SET VINTAGE 36 1/12/2010 08:45 0.650 12583 France 23.4 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536370 POST POSTAGE 3 1/12/2010 08:45 18.000 12583 France 54 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536371 22086 PAPER CHAIN KIT 50'S CHRISTMAS 80 1/12/2010 09:00 2.550 13748 United Kingdom 204 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536372 22632 HAND WARMER RED POLKA DOT 6 1/12/2010 09:01 1.850 17850 United Kingdom 11.1 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536372 22633 HAND WARMER UNION JACK 6 1/12/2010 09:01 1.850 17850 United Kingdom 11.1 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0
536373 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 1/12/2010 09:02 2.550 17850 United Kingdom 15.3 2019-06-19 22:24:11.0 2019-06-19 22:25:09.0

The columns are Transation, StockCode Item, UnitPrice, CustomerID, Country, Amount, date_created, date_updated

I have managed to find a part solution for the reactivePoll

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.